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

Side by Side Diff: cc/test/fake_external_begin_frame_source.cc

Issue 2061273002: cc: Make BackToBackBeginFrameSource a SyntheticBeginFrameSource. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: syntheticbeginframesource: no-more-bfs-base 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/test/fake_external_begin_frame_source.h" 5 #include "cc/test/fake_external_begin_frame_source.h"
6 6
7 #include "base/location.h" 7 #include "base/location.h"
8 #include "base/single_thread_task_runner.h" 8 #include "base/single_thread_task_runner.h"
9 #include "base/threading/thread_task_runner_handle.h" 9 #include "base/threading/thread_task_runner_handle.h"
10 #include "base/time/time.h" 10 #include "base/time/time.h"
11 #include "cc/test/begin_frame_args_test.h" 11 #include "cc/test/begin_frame_args_test.h"
12 12
13 namespace cc { 13 namespace cc {
14 14
15 FakeExternalBeginFrameSource::FakeExternalBeginFrameSource(double refresh_rate) 15 FakeExternalBeginFrameSource::FakeExternalBeginFrameSource(
16 : milliseconds_per_frame_(1000.0 / refresh_rate), 16 double refresh_rate,
17 bool tick_automatically)
18 : tick_automatically_(tick_automatically),
19 milliseconds_per_frame_(1000.0 / refresh_rate),
17 weak_ptr_factory_(this) { 20 weak_ptr_factory_(this) {
18 DetachFromThread(); 21 DetachFromThread();
19 } 22 }
20 23
21 FakeExternalBeginFrameSource::~FakeExternalBeginFrameSource() { 24 FakeExternalBeginFrameSource::~FakeExternalBeginFrameSource() {
22 DCHECK(CalledOnValidThread()); 25 DCHECK(CalledOnValidThread());
23 } 26 }
24 27
25 void FakeExternalBeginFrameSource::OnNeedsBeginFramesChanged( 28 void FakeExternalBeginFrameSource::SetPaused(bool paused) {
26 bool needs_begin_frames) { 29 if (paused != paused_) {
27 DCHECK(CalledOnValidThread()); 30 paused_ = paused;
28 if (needs_begin_frames) { 31 std::set<BeginFrameObserver*> observers(observers_);
29 PostTestOnBeginFrame(); 32 for (auto* obs : observers)
30 } else { 33 obs->OnBeginFrameSourcePausedChanged(paused_);
31 begin_frame_task_.Cancel();
32 } 34 }
33 } 35 }
34 36
35 void FakeExternalBeginFrameSource::TestOnBeginFrame() { 37 void FakeExternalBeginFrameSource::AddObserver(BeginFrameObserver* obs) {
38 DCHECK(obs);
39 DCHECK(observers_.find(obs) == observers_.end());
40
41 bool observers_was_empty = observers_.empty();
42 observers_.insert(obs);
43 obs->OnBeginFrameSourcePausedChanged(paused_);
44 if (observers_was_empty && tick_automatically_)
45 PostTestOnBeginFrame();
46 if (client_)
47 client_->OnAddObserver(obs);
48 }
49
50 void FakeExternalBeginFrameSource::RemoveObserver(BeginFrameObserver* obs) {
51 DCHECK(obs);
52 DCHECK(observers_.find(obs) != observers_.end());
53
54 observers_.erase(obs);
55 if (observers_.empty())
56 begin_frame_task_.Cancel();
57 if (client_)
58 client_->OnRemoveObserver(obs);
59 }
60
61 void FakeExternalBeginFrameSource::TestOnBeginFrame(
62 const BeginFrameArgs& args) {
36 DCHECK(CalledOnValidThread()); 63 DCHECK(CalledOnValidThread());
37 CallOnBeginFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); 64 std::set<BeginFrameObserver*> observers(observers_);
38 PostTestOnBeginFrame(); 65 for (auto* obs : observers)
66 obs->OnBeginFrame(args);
67 if (tick_automatically_)
68 PostTestOnBeginFrame();
39 } 69 }
40 70
41 void FakeExternalBeginFrameSource::PostTestOnBeginFrame() { 71 void FakeExternalBeginFrameSource::PostTestOnBeginFrame() {
42 begin_frame_task_.Reset( 72 begin_frame_task_.Reset(
43 base::Bind(&FakeExternalBeginFrameSource::TestOnBeginFrame, 73 base::Bind(&FakeExternalBeginFrameSource::TestOnBeginFrame,
44 weak_ptr_factory_.GetWeakPtr())); 74 weak_ptr_factory_.GetWeakPtr()));
45 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( 75 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
46 FROM_HERE, begin_frame_task_.callback(), 76 FROM_HERE,
77 base::Bind(begin_frame_task_.callback(),
78 CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)),
47 base::TimeDelta::FromMilliseconds(milliseconds_per_frame_)); 79 base::TimeDelta::FromMilliseconds(milliseconds_per_frame_));
48 } 80 }
49 81
50 } // namespace cc 82 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698