| OLD | NEW |
| 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 "base/message_loop/message_loop_proxy.h" | 5 #include "base/message_loop/message_loop_proxy.h" |
| 6 #include "base/threading/simple_thread.h" | 6 #include "base/threading/simple_thread.h" |
| 7 #include "cc/layers/delegated_frame_provider.h" | 7 #include "cc/layers/delegated_frame_provider.h" |
| 8 #include "cc/layers/delegated_frame_resource_collection.h" | 8 #include "cc/layers/delegated_frame_resource_collection.h" |
| 9 #include "cc/layers/delegated_renderer_layer.h" | 9 #include "cc/layers/delegated_renderer_layer.h" |
| 10 #include "cc/layers/layer.h" | 10 #include "cc/layers/layer.h" |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 #include "testing/gtest/include/gtest/gtest.h" | 21 #include "testing/gtest/include/gtest/gtest.h" |
| 22 #include "third_party/skia/include/core/SkColor.h" | 22 #include "third_party/skia/include/core/SkColor.h" |
| 23 #include "ui/gfx/frame_time.h" | 23 #include "ui/gfx/frame_time.h" |
| 24 | 24 |
| 25 namespace cc { | 25 namespace cc { |
| 26 namespace { | 26 namespace { |
| 27 | 27 |
| 28 class NoMessageLoopOutputSurface : public OutputSurface { | 28 class NoMessageLoopOutputSurface : public OutputSurface { |
| 29 public: | 29 public: |
| 30 NoMessageLoopOutputSurface() : OutputSurface(TestContextProvider::Create()) {} | 30 NoMessageLoopOutputSurface() : OutputSurface(TestContextProvider::Create()) {} |
| 31 virtual ~NoMessageLoopOutputSurface() {} | 31 ~NoMessageLoopOutputSurface() override {} |
| 32 | 32 |
| 33 // OutputSurface overrides. | 33 // OutputSurface overrides. |
| 34 virtual void SwapBuffers(CompositorFrame* frame) override { | 34 void SwapBuffers(CompositorFrame* frame) override { |
| 35 DCHECK(client_); | 35 DCHECK(client_); |
| 36 client_->DidSwapBuffers(); | 36 client_->DidSwapBuffers(); |
| 37 client_->DidSwapBuffersComplete(); | 37 client_->DidSwapBuffersComplete(); |
| 38 } | 38 } |
| 39 }; | 39 }; |
| 40 | 40 |
| 41 class LayerTreeHostNoMessageLoopTest | 41 class LayerTreeHostNoMessageLoopTest |
| 42 : public testing::Test, | 42 : public testing::Test, |
| 43 public base::DelegateSimpleThread::Delegate, | 43 public base::DelegateSimpleThread::Delegate, |
| 44 public LayerTreeHostClient, | 44 public LayerTreeHostClient, |
| 45 public LayerTreeHostSingleThreadClient { | 45 public LayerTreeHostSingleThreadClient { |
| 46 public: | 46 public: |
| 47 LayerTreeHostNoMessageLoopTest() | 47 LayerTreeHostNoMessageLoopTest() |
| 48 : did_initialize_output_surface_(false), | 48 : did_initialize_output_surface_(false), |
| 49 did_commit_(false), | 49 did_commit_(false), |
| 50 did_commit_and_draw_frame_(false), | 50 did_commit_and_draw_frame_(false), |
| 51 size_(100, 100), | 51 size_(100, 100), |
| 52 no_loop_thread_(this, "LayerTreeHostNoMessageLoopTest") {} | 52 no_loop_thread_(this, "LayerTreeHostNoMessageLoopTest") {} |
| 53 virtual ~LayerTreeHostNoMessageLoopTest() {} | 53 virtual ~LayerTreeHostNoMessageLoopTest() {} |
| 54 | 54 |
| 55 // LayerTreeHostClient overrides. | 55 // LayerTreeHostClient overrides. |
| 56 virtual void WillBeginMainFrame(int frame_id) override {} | 56 void WillBeginMainFrame(int frame_id) override {} |
| 57 virtual void BeginMainFrame(const BeginFrameArgs& args) override {} | 57 void BeginMainFrame(const BeginFrameArgs& args) override {} |
| 58 virtual void DidBeginMainFrame() override {} | 58 void DidBeginMainFrame() override {} |
| 59 virtual void Layout() override {} | 59 void Layout() override {} |
| 60 virtual void ApplyViewportDeltas(const gfx::Vector2d& inner_delta, | 60 void ApplyViewportDeltas(const gfx::Vector2d& inner_delta, |
| 61 const gfx::Vector2d& outer_delta, | 61 const gfx::Vector2d& outer_delta, |
| 62 float page_scale, | 62 float page_scale, |
| 63 float top_controls_delta) override {} | 63 float top_controls_delta) override {} |
| 64 virtual void ApplyViewportDeltas(const gfx::Vector2d& scroll_delta, | 64 void ApplyViewportDeltas(const gfx::Vector2d& scroll_delta, |
| 65 float page_scale, | 65 float page_scale, |
| 66 float top_controls_delta) override {} | 66 float top_controls_delta) override {} |
| 67 virtual void RequestNewOutputSurface(bool fallback) override { | 67 void RequestNewOutputSurface(bool fallback) override { |
| 68 layer_tree_host_->SetOutputSurface( | 68 layer_tree_host_->SetOutputSurface( |
| 69 make_scoped_ptr<OutputSurface>(new NoMessageLoopOutputSurface)); | 69 make_scoped_ptr<OutputSurface>(new NoMessageLoopOutputSurface)); |
| 70 } | 70 } |
| 71 virtual void DidInitializeOutputSurface() override { | 71 void DidInitializeOutputSurface() override { |
| 72 did_initialize_output_surface_ = true; | 72 did_initialize_output_surface_ = true; |
| 73 } | 73 } |
| 74 virtual void WillCommit() override {} | 74 void WillCommit() override {} |
| 75 virtual void DidCommit() override { did_commit_ = true; } | 75 void DidCommit() override { did_commit_ = true; } |
| 76 virtual void DidCommitAndDrawFrame() override { | 76 void DidCommitAndDrawFrame() override { did_commit_and_draw_frame_ = true; } |
| 77 did_commit_and_draw_frame_ = true; | 77 void DidCompleteSwapBuffers() override {} |
| 78 } | |
| 79 virtual void DidCompleteSwapBuffers() override {} | |
| 80 | 78 |
| 81 // LayerTreeHostSingleThreadClient overrides. | 79 // LayerTreeHostSingleThreadClient overrides. |
| 82 virtual void DidPostSwapBuffers() override {} | 80 void DidPostSwapBuffers() override {} |
| 83 virtual void DidAbortSwapBuffers() override {} | 81 void DidAbortSwapBuffers() override {} |
| 84 | 82 |
| 85 void RunTest() { | 83 void RunTest() { |
| 86 no_loop_thread_.Start(); | 84 no_loop_thread_.Start(); |
| 87 no_loop_thread_.Join(); | 85 no_loop_thread_.Join(); |
| 88 } | 86 } |
| 89 | 87 |
| 90 // base::DelegateSimpleThread::Delegate override. | 88 // base::DelegateSimpleThread::Delegate override. |
| 91 virtual void Run() override { | 89 void Run() override { |
| 92 ASSERT_FALSE(base::MessageLoopProxy::current().get()); | 90 ASSERT_FALSE(base::MessageLoopProxy::current().get()); |
| 93 RunTestWithoutMessageLoop(); | 91 RunTestWithoutMessageLoop(); |
| 94 EXPECT_FALSE(base::MessageLoopProxy::current().get()); | 92 EXPECT_FALSE(base::MessageLoopProxy::current().get()); |
| 95 } | 93 } |
| 96 | 94 |
| 97 protected: | 95 protected: |
| 98 virtual void RunTestWithoutMessageLoop() = 0; | 96 virtual void RunTestWithoutMessageLoop() = 0; |
| 99 | 97 |
| 100 void SetupLayerTreeHost() { | 98 void SetupLayerTreeHost() { |
| 101 LayerTreeSettings settings; | 99 LayerTreeSettings settings; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 130 bool did_commit_and_draw_frame_; | 128 bool did_commit_and_draw_frame_; |
| 131 gfx::Size size_; | 129 gfx::Size size_; |
| 132 | 130 |
| 133 private: | 131 private: |
| 134 base::DelegateSimpleThread no_loop_thread_; | 132 base::DelegateSimpleThread no_loop_thread_; |
| 135 }; | 133 }; |
| 136 | 134 |
| 137 class LayerTreeHostNoMessageLoopSmokeTest | 135 class LayerTreeHostNoMessageLoopSmokeTest |
| 138 : public LayerTreeHostNoMessageLoopTest { | 136 : public LayerTreeHostNoMessageLoopTest { |
| 139 protected: | 137 protected: |
| 140 virtual void RunTestWithoutMessageLoop() override { | 138 void RunTestWithoutMessageLoop() override { |
| 141 gfx::Size size(100, 100); | 139 gfx::Size size(100, 100); |
| 142 | 140 |
| 143 // Set up root layer. | 141 // Set up root layer. |
| 144 { | 142 { |
| 145 scoped_refptr<SolidColorLayer> solid_color_layer = | 143 scoped_refptr<SolidColorLayer> solid_color_layer = |
| 146 SolidColorLayer::Create(); | 144 SolidColorLayer::Create(); |
| 147 solid_color_layer->SetBackgroundColor(SK_ColorRED); | 145 solid_color_layer->SetBackgroundColor(SK_ColorRED); |
| 148 solid_color_layer->SetBounds(size_); | 146 solid_color_layer->SetBounds(size_); |
| 149 solid_color_layer->SetIsDrawable(true); | 147 solid_color_layer->SetIsDrawable(true); |
| 150 root_layer_ = solid_color_layer; | 148 root_layer_ = solid_color_layer; |
| 151 } | 149 } |
| 152 | 150 |
| 153 SetupLayerTreeHost(); | 151 SetupLayerTreeHost(); |
| 154 Composite(); | 152 Composite(); |
| 155 TearDownLayerTreeHost(); | 153 TearDownLayerTreeHost(); |
| 156 } | 154 } |
| 157 }; | 155 }; |
| 158 | 156 |
| 159 TEST_F(LayerTreeHostNoMessageLoopSmokeTest, SmokeTest) { | 157 TEST_F(LayerTreeHostNoMessageLoopSmokeTest, SmokeTest) { |
| 160 RunTest(); | 158 RunTest(); |
| 161 } | 159 } |
| 162 | 160 |
| 163 class LayerTreeHostNoMessageLoopDelegatedLayer | 161 class LayerTreeHostNoMessageLoopDelegatedLayer |
| 164 : public LayerTreeHostNoMessageLoopTest, | 162 : public LayerTreeHostNoMessageLoopTest, |
| 165 public DelegatedFrameResourceCollectionClient { | 163 public DelegatedFrameResourceCollectionClient { |
| 166 protected: | 164 protected: |
| 167 virtual void RunTestWithoutMessageLoop() override { | 165 void RunTestWithoutMessageLoop() override { |
| 168 resource_collection_ = new DelegatedFrameResourceCollection; | 166 resource_collection_ = new DelegatedFrameResourceCollection; |
| 169 frame_provider_ = new DelegatedFrameProvider( | 167 frame_provider_ = new DelegatedFrameProvider( |
| 170 resource_collection_.get(), CreateFrameDataWithResource(998)); | 168 resource_collection_.get(), CreateFrameDataWithResource(998)); |
| 171 | 169 |
| 172 root_layer_ = Layer::Create(); | 170 root_layer_ = Layer::Create(); |
| 173 delegated_layer_ = | 171 delegated_layer_ = |
| 174 FakeDelegatedRendererLayer::Create(frame_provider_.get()); | 172 FakeDelegatedRendererLayer::Create(frame_provider_.get()); |
| 175 delegated_layer_->SetBounds(size_); | 173 delegated_layer_->SetBounds(size_); |
| 176 delegated_layer_->SetIsDrawable(true); | 174 delegated_layer_->SetIsDrawable(true); |
| 177 root_layer_->AddChild(delegated_layer_); | 175 root_layer_->AddChild(delegated_layer_); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 191 TearDownLayerTreeHost(); | 189 TearDownLayerTreeHost(); |
| 192 delegated_layer_ = NULL; | 190 delegated_layer_ = NULL; |
| 193 frame_provider_ = NULL; | 191 frame_provider_ = NULL; |
| 194 | 192 |
| 195 // Resource from second frame should be returned. | 193 // Resource from second frame should be returned. |
| 196 CheckReturnedResource(1u); | 194 CheckReturnedResource(1u); |
| 197 resource_collection_ = NULL; | 195 resource_collection_ = NULL; |
| 198 } | 196 } |
| 199 | 197 |
| 200 // DelegatedFrameResourceCollectionClient overrides. | 198 // DelegatedFrameResourceCollectionClient overrides. |
| 201 virtual void UnusedResourcesAreAvailable() override {} | 199 void UnusedResourcesAreAvailable() override {} |
| 202 | 200 |
| 203 private: | 201 private: |
| 204 scoped_ptr<DelegatedFrameData> CreateFrameDataWithResource( | 202 scoped_ptr<DelegatedFrameData> CreateFrameDataWithResource( |
| 205 ResourceProvider::ResourceId resource_id) { | 203 ResourceProvider::ResourceId resource_id) { |
| 206 scoped_ptr<DelegatedFrameData> frame(new DelegatedFrameData); | 204 scoped_ptr<DelegatedFrameData> frame(new DelegatedFrameData); |
| 207 gfx::Rect frame_rect(size_); | 205 gfx::Rect frame_rect(size_); |
| 208 | 206 |
| 209 scoped_ptr<RenderPass> root_pass(RenderPass::Create()); | 207 scoped_ptr<RenderPass> root_pass(RenderPass::Create()); |
| 210 root_pass->SetNew( | 208 root_pass->SetNew( |
| 211 RenderPassId(1, 1), frame_rect, frame_rect, gfx::Transform()); | 209 RenderPassId(1, 1), frame_rect, frame_rect, gfx::Transform()); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 231 scoped_refptr<DelegatedFrameProvider> frame_provider_; | 229 scoped_refptr<DelegatedFrameProvider> frame_provider_; |
| 232 scoped_refptr<DelegatedRendererLayer> delegated_layer_; | 230 scoped_refptr<DelegatedRendererLayer> delegated_layer_; |
| 233 }; | 231 }; |
| 234 | 232 |
| 235 TEST_F(LayerTreeHostNoMessageLoopDelegatedLayer, SingleDelegatedLayer) { | 233 TEST_F(LayerTreeHostNoMessageLoopDelegatedLayer, SingleDelegatedLayer) { |
| 236 RunTest(); | 234 RunTest(); |
| 237 } | 235 } |
| 238 | 236 |
| 239 } // namespace | 237 } // namespace |
| 240 } // namespace cc | 238 } // namespace cc |
| OLD | NEW |