OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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/layer_tree_test.h" | 5 #include "cc/test/layer_tree_test.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "cc/animation/animation.h" | 8 #include "cc/animation/animation.h" |
9 #include "cc/animation/animation_registrar.h" | 9 #include "cc/animation/animation_registrar.h" |
10 #include "cc/animation/layer_animation_controller.h" | 10 #include "cc/animation/layer_animation_controller.h" |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 tile_task_worker_pool, resource_pool, staging_resource_pool); | 54 tile_task_worker_pool, resource_pool, staging_resource_pool); |
55 } | 55 } |
56 | 56 |
57 class ExternalBeginFrameSourceForTest | 57 class ExternalBeginFrameSourceForTest |
58 : public BeginFrameSourceMixIn, | 58 : public BeginFrameSourceMixIn, |
59 public NON_EXPORTED_BASE(base::NonThreadSafe) { | 59 public NON_EXPORTED_BASE(base::NonThreadSafe) { |
60 public: | 60 public: |
61 explicit ExternalBeginFrameSourceForTest(double refresh_rate) | 61 explicit ExternalBeginFrameSourceForTest(double refresh_rate) |
62 : milliseconds_per_frame_(1000.0 / refresh_rate), | 62 : milliseconds_per_frame_(1000.0 / refresh_rate), |
63 is_ready_(false), | 63 is_ready_(false), |
| 64 needs_begin_frames_(false), |
64 weak_ptr_factory_(this) { | 65 weak_ptr_factory_(this) { |
| 66 test_on_begin_frame_closure_ = base::Bind( |
| 67 &ExternalBeginFrameSourceForTest::TestOnBeginFrame, |
| 68 weak_ptr_factory_.GetWeakPtr()); |
65 DetachFromThread(); | 69 DetachFromThread(); |
66 } | 70 } |
67 | 71 |
68 virtual ~ExternalBeginFrameSourceForTest() { | 72 virtual ~ExternalBeginFrameSourceForTest() { |
69 DCHECK(CalledOnValidThread()); | 73 DCHECK(CalledOnValidThread()); |
70 } | 74 } |
71 | 75 |
72 void OnNeedsBeginFramesChange(bool needs_begin_frames) override { | 76 void OnNeedsBeginFramesChange(bool needs_begin_frames) override { |
73 DCHECK(CalledOnValidThread()); | 77 DCHECK(CalledOnValidThread()); |
74 if (needs_begin_frames) { | 78 if (needs_begin_frames_ == needs_begin_frames) |
75 base::MessageLoop::current()->PostDelayedTask( | 79 return; |
76 FROM_HERE, | 80 needs_begin_frames_ = needs_begin_frames; |
77 base::Bind(&ExternalBeginFrameSourceForTest::TestOnBeginFrame, | 81 ScheduleBeginFrameIfNeeded(); |
78 weak_ptr_factory_.GetWeakPtr()), | |
79 base::TimeDelta::FromMilliseconds(milliseconds_per_frame_)); | |
80 } | |
81 } | 82 } |
82 | 83 |
83 void SetClientReady() override { | 84 void SetClientReady() override { |
84 DCHECK(CalledOnValidThread()); | 85 DCHECK(CalledOnValidThread()); |
85 is_ready_ = true; | 86 is_ready_ = true; |
86 } | 87 } |
87 | 88 |
88 bool is_ready() const { | 89 bool is_ready() const { |
89 return is_ready_; | 90 return is_ready_; |
90 } | 91 } |
91 | 92 |
92 void TestOnBeginFrame() { | 93 void TestOnBeginFrame() { |
93 DCHECK(CalledOnValidThread()); | 94 DCHECK(CalledOnValidThread()); |
94 CallOnBeginFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); | 95 CallOnBeginFrame(CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE)); |
| 96 ScheduleBeginFrameIfNeeded(); |
| 97 } |
| 98 |
| 99 void ScheduleBeginFrameIfNeeded() { |
| 100 test_on_begin_frame_task_.Cancel(); |
| 101 test_on_begin_frame_task_.Reset(test_on_begin_frame_closure_); |
| 102 if (needs_begin_frames_) |
| 103 base::MessageLoop::current()->PostDelayedTask(FROM_HERE, |
| 104 test_on_begin_frame_task_.callback(), |
| 105 base::TimeDelta::FromMilliseconds(milliseconds_per_frame_)); |
95 } | 106 } |
96 | 107 |
97 private: | 108 private: |
98 double milliseconds_per_frame_; | 109 double milliseconds_per_frame_; |
99 bool is_ready_; | 110 bool is_ready_; |
| 111 bool needs_begin_frames_; |
| 112 base::Closure test_on_begin_frame_closure_; |
| 113 base::CancelableClosure test_on_begin_frame_task_; |
100 base::WeakPtrFactory<ExternalBeginFrameSourceForTest> weak_ptr_factory_; | 114 base::WeakPtrFactory<ExternalBeginFrameSourceForTest> weak_ptr_factory_; |
101 }; | 115 }; |
102 | 116 |
103 // Adapts ThreadProxy for test. Injects test hooks for testing. | 117 // Adapts ThreadProxy for test. Injects test hooks for testing. |
104 class ThreadProxyForTest : public ThreadProxy { | 118 class ThreadProxyForTest : public ThreadProxy { |
105 public: | 119 public: |
106 static scoped_ptr<Proxy> Create( | 120 static scoped_ptr<Proxy> Create( |
107 TestHooks* test_hooks, | 121 TestHooks* test_hooks, |
108 LayerTreeHost* host, | 122 LayerTreeHost* host, |
109 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, | 123 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
151 void ScheduledActionBeginOutputSurfaceCreation() override { | 165 void ScheduledActionBeginOutputSurfaceCreation() override { |
152 ThreadProxy::ScheduledActionBeginOutputSurfaceCreation(); | 166 ThreadProxy::ScheduledActionBeginOutputSurfaceCreation(); |
153 test_hooks_->ScheduledActionBeginOutputSurfaceCreation(); | 167 test_hooks_->ScheduledActionBeginOutputSurfaceCreation(); |
154 } | 168 } |
155 | 169 |
156 void ScheduledActionPrepareTiles() override { | 170 void ScheduledActionPrepareTiles() override { |
157 ThreadProxy::ScheduledActionPrepareTiles(); | 171 ThreadProxy::ScheduledActionPrepareTiles(); |
158 test_hooks_->ScheduledActionPrepareTiles(); | 172 test_hooks_->ScheduledActionPrepareTiles(); |
159 } | 173 } |
160 | 174 |
| 175 void ScheduledActionInvalidateOutputSurface() override { |
| 176 ThreadProxy::ScheduledActionInvalidateOutputSurface(); |
| 177 test_hooks_->ScheduledActionInvalidateOutputSurface(); |
| 178 } |
| 179 |
161 ThreadProxyForTest( | 180 ThreadProxyForTest( |
162 TestHooks* test_hooks, | 181 TestHooks* test_hooks, |
163 LayerTreeHost* host, | 182 LayerTreeHost* host, |
164 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, | 183 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, |
165 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner, | 184 scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner, |
166 scoped_ptr<BeginFrameSource> external_begin_frame_source) | 185 scoped_ptr<BeginFrameSource> external_begin_frame_source) |
167 : ThreadProxy(host, main_task_runner, | 186 : ThreadProxy(host, main_task_runner, |
168 impl_task_runner, | 187 impl_task_runner, |
169 external_begin_frame_source.Pass()), | 188 external_begin_frame_source.Pass()), |
170 test_hooks_(test_hooks) {} | 189 test_hooks_(test_hooks) {} |
(...skipping 658 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
829 return -1; | 848 return -1; |
830 } | 849 } |
831 | 850 |
832 void LayerTreeTest::DestroyLayerTreeHost() { | 851 void LayerTreeTest::DestroyLayerTreeHost() { |
833 if (layer_tree_host_ && layer_tree_host_->root_layer()) | 852 if (layer_tree_host_ && layer_tree_host_->root_layer()) |
834 layer_tree_host_->root_layer()->SetLayerTreeHost(NULL); | 853 layer_tree_host_->root_layer()->SetLayerTreeHost(NULL); |
835 layer_tree_host_ = nullptr; | 854 layer_tree_host_ = nullptr; |
836 } | 855 } |
837 | 856 |
838 } // namespace cc | 857 } // namespace cc |
OLD | NEW |