1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// This class chooses a capture interval so as to limit CPU usage to not exceed
6// a specified %age. It bases this on the CPU usage of recent capture and encode
7// operations, and on the number of available CPUs.
8
9#ifndef REMOTING_HOST_CAPTURE_SCHEDULER_H_
10#define REMOTING_HOST_CAPTURE_SCHEDULER_H_
11
12#include "base/time/time.h"
13#include "remoting/base/running_average.h"
14
15namespace remoting {
16
17class CaptureScheduler {
18 public:
19  CaptureScheduler();
20  ~CaptureScheduler();
21
22  // Returns the time to wait after initiating a capture before triggering
23  // the next.
24  base::TimeDelta NextCaptureDelay();
25
26  // Records time spent on capturing and encoding.
27  void RecordCaptureTime(base::TimeDelta capture_time);
28  void RecordEncodeTime(base::TimeDelta encode_time);
29
30  // Sets minimum interval between frames.
31  void set_minimum_interval(base::TimeDelta minimum_interval) {
32    minimum_interval_ = minimum_interval;
33  }
34
35  // Overrides the number of processors for testing.
36  void SetNumOfProcessorsForTest(int num_of_processors);
37
38 private:
39  base::TimeDelta minimum_interval_;
40  int num_of_processors_;
41  RunningAverage capture_time_;
42  RunningAverage encode_time_;
43
44  DISALLOW_COPY_AND_ASSIGN(CaptureScheduler);
45};
46
47}  // namespace remoting
48
49#endif  // REMOTING_HOST_CAPTURE_SCHEDULER_H_
50