Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1297)

Unified Diff: cc/scheduler/begin_frame_source.h

Issue 2061273002: cc: Make BackToBackBeginFrameSource a SyntheticBeginFrameSource. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: syntheticbeginframesource: onemorenit Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | cc/scheduler/begin_frame_source.cc » ('j') | cc/scheduler/begin_frame_source.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/scheduler/begin_frame_source.h
diff --git a/cc/scheduler/begin_frame_source.h b/cc/scheduler/begin_frame_source.h
index 575ab06beb450555065d2801b7f388c3b4180bdc..1f5aabb6fe271a8655a768e345a16ec547dcd09b 100644
--- a/cc/scheduler/begin_frame_source.h
+++ b/cc/scheduler/begin_frame_source.h
@@ -131,7 +131,7 @@ class CC_EXPORT BeginFrameSourceBase : public BeginFrameSource {
public:
~BeginFrameSourceBase() override;
- // BeginFrameSource
+ // BeginFrameSource implementation.
void DidFinishFrame(BeginFrameObserver* obs,
size_t remaining_frames) override {}
void AddObserver(BeginFrameObserver* obs) override;
@@ -145,7 +145,7 @@ class CC_EXPORT BeginFrameSourceBase : public BeginFrameSource {
void CallOnBeginFrame(const BeginFrameArgs& args);
void SetBeginFrameSourcePaused(bool paused);
- // This notifies that the subclass that it must turn on or off its mechnanism
+ // This notifies the subclass that it must turn on or off its mechnanism
// for producing BeginFrames.
virtual void OnNeedsBeginFramesChanged(bool needs_begin_frames) {}
@@ -158,43 +158,11 @@ class CC_EXPORT BeginFrameSourceBase : public BeginFrameSource {
DISALLOW_COPY_AND_ASSIGN(BeginFrameSourceBase);
};
-// A frame source which calls BeginFrame (at the next possible time) as soon as
-// remaining frames reaches zero.
-class CC_EXPORT BackToBackBeginFrameSource : public BeginFrameSourceBase {
- public:
- explicit BackToBackBeginFrameSource(
- base::SingleThreadTaskRunner* task_runner);
- ~BackToBackBeginFrameSource() override;
-
- // BeginFrameSource
- void AddObserver(BeginFrameObserver* obs) override;
- void RemoveObserver(BeginFrameObserver* obs) override;
- void DidFinishFrame(BeginFrameObserver* obs,
- size_t remaining_frames) override;
-
- protected:
- virtual base::TimeTicks Now(); // Now overridable for testing
-
- base::SingleThreadTaskRunner* task_runner_;
- base::CancelableClosure begin_frame_task_;
- std::set<BeginFrameObserver*> pending_begin_frame_observers_;
-
- void PostPendingBeginFramesTask();
- void SendPendingBeginFrames();
-
- private:
- base::WeakPtrFactory<BackToBackBeginFrameSource> weak_factory_;
-
- DISALLOW_COPY_AND_ASSIGN(BackToBackBeginFrameSource);
-};
-
// A frame source which is locked to an external parameters provides from a
// vsync source and generates BeginFrameArgs for it.
class CC_EXPORT SyntheticBeginFrameSource : public BeginFrameSourceBase,
public DelayBasedTimeSourceClient {
public:
- explicit SyntheticBeginFrameSource(base::SingleThreadTaskRunner* task_runner,
- base::TimeDelta initial_vsync_interval);
explicit SyntheticBeginFrameSource(
std::unique_ptr<DelayBasedTimeSource> time_source);
~SyntheticBeginFrameSource() override;
@@ -204,25 +172,49 @@ class CC_EXPORT SyntheticBeginFrameSource : public BeginFrameSourceBase,
// This overrides any past or future interval from updating vsync parameters.
void SetAuthoritativeVSyncInterval(base::TimeDelta interval);
- // BeginFrameSourceBase
+ // BeginFrameSourceBase overrides.
void AddObserver(BeginFrameObserver* obs) override;
+ void RemoveObserver(BeginFrameObserver* obs) override;
void OnNeedsBeginFramesChanged(bool needs_begin_frames) override;
+ void DidFinishFrame(BeginFrameObserver* obs,
+ size_t remaining_frames) override;
// DelayBasedTimeSourceClient
void OnTimerTick() override;
+ // When unthrottled, BeginFrames will be generates as fast as previous frames
+ // finish for each observer.
+ void SetUnthrottled(bool unthrottled);
+
protected:
BeginFrameArgs CreateBeginFrameArgs(base::TimeTicks frame_time,
BeginFrameArgs::BeginFrameArgsType type);
std::unique_ptr<DelayBasedTimeSource> time_source_;
base::TimeTicks last_timebase_;
+ base::TimeDelta last_interval_;
base::TimeDelta authoritative_interval_;
+ bool unthrottled_ = false;
+ bool needs_unthrottled_tick_ = false;
+ std::set<BeginFrameObserver*> frame_finished_observers_;
+
private:
DISALLOW_COPY_AND_ASSIGN(SyntheticBeginFrameSource);
};
+// A frame source which calls BeginFrame (at the next possible time) as soon as
+// remaining frames reaches zero.
+class CC_EXPORT BackToBackBeginFrameSource : public SyntheticBeginFrameSource {
+ public:
+ explicit BackToBackBeginFrameSource(
+ base::SingleThreadTaskRunner* task_runner);
+ ~BackToBackBeginFrameSource() override;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(BackToBackBeginFrameSource);
+};
+
} // namespace cc
#endif // CC_SCHEDULER_BEGIN_FRAME_SOURCE_H_
« no previous file with comments | « no previous file | cc/scheduler/begin_frame_source.cc » ('j') | cc/scheduler/begin_frame_source.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698