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

Side by Side Diff: cc/trees/layer_tree_host_impl_unittest.cc

Issue 151093005: cc: Update Main RendererCapabilities on DeferredInitialize (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: with tests Created 6 years, 10 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 | Annotate | Revision Log
OLDNEW
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/trees/layer_tree_host_impl.h" 5 #include "cc/trees/layer_tree_host_impl.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 settings.texture_id_allocation_chunk_size = 1; 97 settings.texture_id_allocation_chunk_size = 1;
98 return settings; 98 return settings;
99 } 99 }
100 100
101 virtual void SetUp() OVERRIDE { 101 virtual void SetUp() OVERRIDE {
102 CreateHostImpl(DefaultSettings(), CreateOutputSurface()); 102 CreateHostImpl(DefaultSettings(), CreateOutputSurface());
103 } 103 }
104 104
105 virtual void TearDown() OVERRIDE {} 105 virtual void TearDown() OVERRIDE {}
106 106
107 virtual void UpdateRendererCapabilitiesOnImplThread() OVERRIDE {}
107 virtual void DidLoseOutputSurfaceOnImplThread() OVERRIDE {} 108 virtual void DidLoseOutputSurfaceOnImplThread() OVERRIDE {}
108 virtual void DidSwapBuffersOnImplThread() OVERRIDE {} 109 virtual void DidSwapBuffersOnImplThread() OVERRIDE {}
109 virtual void OnSwapBuffersCompleteOnImplThread() OVERRIDE {} 110 virtual void OnSwapBuffersCompleteOnImplThread() OVERRIDE {}
110 virtual void BeginImplFrame(const BeginFrameArgs& args) OVERRIDE {} 111 virtual void BeginImplFrame(const BeginFrameArgs& args) OVERRIDE {}
111 virtual void OnCanDrawStateChanged(bool can_draw) OVERRIDE { 112 virtual void OnCanDrawStateChanged(bool can_draw) OVERRIDE {
112 on_can_draw_state_changed_called_ = true; 113 on_can_draw_state_changed_called_ = true;
113 } 114 }
114 virtual void NotifyReadyToActivate() OVERRIDE { 115 virtual void NotifyReadyToActivate() OVERRIDE {
115 did_notify_ready_to_activate_ = true; 116 did_notify_ready_to_activate_ = true;
116 host_impl_->ActivatePendingTree(); 117 host_impl_->ActivatePendingTree();
(...skipping 5089 matching lines...) Expand 10 before | Expand all | Expand 10 after
5206 output_surface.PassAs<OutputSurface>())); 5207 output_surface.PassAs<OutputSurface>()));
5207 5208
5208 scoped_ptr<SolidColorLayerImpl> root_layer = 5209 scoped_ptr<SolidColorLayerImpl> root_layer =
5209 SolidColorLayerImpl::Create(host_impl_->active_tree(), 1); 5210 SolidColorLayerImpl::Create(host_impl_->active_tree(), 1);
5210 SetupRootLayerImpl(root_layer.PassAs<LayerImpl>()); 5211 SetupRootLayerImpl(root_layer.PassAs<LayerImpl>());
5211 5212
5212 onscreen_context_provider_ = TestContextProvider::Create(); 5213 onscreen_context_provider_ = TestContextProvider::Create();
5213 offscreen_context_provider_ = TestContextProvider::Create(); 5214 offscreen_context_provider_ = TestContextProvider::Create();
5214 } 5215 }
5215 5216
5217 virtual void UpdateRendererCapabilitiesOnImplThread() OVERRIDE {
5218 did_update_renderer_capabilities_ = true;
5219 }
5220
5216 FakeOutputSurface* output_surface_; 5221 FakeOutputSurface* output_surface_;
5217 scoped_refptr<TestContextProvider> onscreen_context_provider_; 5222 scoped_refptr<TestContextProvider> onscreen_context_provider_;
5218 scoped_refptr<TestContextProvider> offscreen_context_provider_; 5223 scoped_refptr<TestContextProvider> offscreen_context_provider_;
5224 bool did_update_renderer_capabilities_;
5219 }; 5225 };
5220 5226
5221 5227
5222 TEST_F(LayerTreeHostImplTestDeferredInitialize, Success) { 5228 TEST_F(LayerTreeHostImplTestDeferredInitialize, Success) {
5223 // Software draw. 5229 // Software draw.
5224 DrawFrame(); 5230 DrawFrame();
5225 5231
5226 EXPECT_FALSE(host_impl_->output_surface()->context_provider()); 5232 EXPECT_FALSE(host_impl_->output_surface()->context_provider());
5227 EXPECT_FALSE(host_impl_->offscreen_context_provider()); 5233 EXPECT_FALSE(host_impl_->offscreen_context_provider());
5228 5234
5229 // DeferredInitialize and hardware draw. 5235 // DeferredInitialize and hardware draw.
5236 did_update_renderer_capabilities_ = false;
5230 EXPECT_TRUE(output_surface_->InitializeAndSetContext3d( 5237 EXPECT_TRUE(output_surface_->InitializeAndSetContext3d(
5231 onscreen_context_provider_, offscreen_context_provider_)); 5238 onscreen_context_provider_, offscreen_context_provider_));
5232 EXPECT_EQ(onscreen_context_provider_, 5239 EXPECT_EQ(onscreen_context_provider_,
5233 host_impl_->output_surface()->context_provider()); 5240 host_impl_->output_surface()->context_provider());
5234 EXPECT_EQ(offscreen_context_provider_, 5241 EXPECT_EQ(offscreen_context_provider_,
5235 host_impl_->offscreen_context_provider()); 5242 host_impl_->offscreen_context_provider());
5243 EXPECT_TRUE(did_update_renderer_capabilities_);
5236 5244
5237 // Defer intialized GL draw. 5245 // Defer intialized GL draw.
5238 DrawFrame(); 5246 DrawFrame();
5239 5247
5240 // Revert back to software. 5248 // Revert back to software.
5249 did_update_renderer_capabilities_ = false;
5241 output_surface_->ReleaseGL(); 5250 output_surface_->ReleaseGL();
5242 EXPECT_FALSE(host_impl_->output_surface()->context_provider()); 5251 EXPECT_FALSE(host_impl_->output_surface()->context_provider());
5243 EXPECT_FALSE(host_impl_->offscreen_context_provider()); 5252 EXPECT_FALSE(host_impl_->offscreen_context_provider());
5253 EXPECT_TRUE(did_update_renderer_capabilities_);
5244 5254
5245 // Software draw again. 5255 // Software draw again.
5246 DrawFrame(); 5256 DrawFrame();
5247 } 5257 }
5248 5258
5249 TEST_F(LayerTreeHostImplTestDeferredInitialize, Fails_OnscreenContext_0) { 5259 TEST_F(LayerTreeHostImplTestDeferredInitialize, Fails_OnscreenContext_0) {
5250 // Software draw. 5260 // Software draw.
5251 DrawFrame(); 5261 DrawFrame();
5252 5262
5253 // Fail initialization of the onscreen context before the OutputSurface binds 5263 // Fail initialization of the onscreen context before the OutputSurface binds
5254 // it to the thread. 5264 // it to the thread.
5255 onscreen_context_provider_->UnboundTestContext3d()->set_context_lost(true); 5265 onscreen_context_provider_->UnboundTestContext3d()->set_context_lost(true);
5256 5266
5257 EXPECT_FALSE(host_impl_->output_surface()->context_provider()); 5267 EXPECT_FALSE(host_impl_->output_surface()->context_provider());
5258 EXPECT_FALSE(host_impl_->offscreen_context_provider()); 5268 EXPECT_FALSE(host_impl_->offscreen_context_provider());
5259 5269
5260 // DeferredInitialize fails. 5270 // DeferredInitialize fails.
5271 did_update_renderer_capabilities_ = false;
5261 EXPECT_FALSE(output_surface_->InitializeAndSetContext3d( 5272 EXPECT_FALSE(output_surface_->InitializeAndSetContext3d(
5262 onscreen_context_provider_, offscreen_context_provider_)); 5273 onscreen_context_provider_, offscreen_context_provider_));
5263 EXPECT_FALSE(host_impl_->output_surface()->context_provider()); 5274 EXPECT_FALSE(host_impl_->output_surface()->context_provider());
5264 EXPECT_FALSE(host_impl_->offscreen_context_provider()); 5275 EXPECT_FALSE(host_impl_->offscreen_context_provider());
5276 EXPECT_FALSE(did_update_renderer_capabilities_);
5265 5277
5266 // Software draw again. 5278 // Software draw again.
5267 DrawFrame(); 5279 DrawFrame();
5268 } 5280 }
5269 5281
5282 // TODO(boliu): After r239415, fails_OnscreenContext_1 and 2 are exactly the
5283 // same as 0. They were supposed to test makeCurrent failing in the
5284 // OutputSurface, LayerTreeHostImpl, and GLRenderer respectively.
5270 TEST_F(LayerTreeHostImplTestDeferredInitialize, Fails_OnscreenContext_1) { 5285 TEST_F(LayerTreeHostImplTestDeferredInitialize, Fails_OnscreenContext_1) {
5271 // Software draw. 5286 // Software draw.
5272 DrawFrame(); 5287 DrawFrame();
5273 5288
5274 EXPECT_FALSE(host_impl_->output_surface()->context_provider()); 5289 EXPECT_FALSE(host_impl_->output_surface()->context_provider());
5275 EXPECT_FALSE(host_impl_->offscreen_context_provider()); 5290 EXPECT_FALSE(host_impl_->offscreen_context_provider());
5276 5291
5277 onscreen_context_provider_->UnboundTestContext3d()->set_context_lost(true); 5292 onscreen_context_provider_->UnboundTestContext3d()->set_context_lost(true);
5278 5293
5279 EXPECT_FALSE(host_impl_->output_surface()->context_provider()); 5294 EXPECT_FALSE(host_impl_->output_surface()->context_provider());
5280 // DeferredInitialize fails. 5295 // DeferredInitialize fails.
5296 did_update_renderer_capabilities_ = false;
5281 EXPECT_FALSE(output_surface_->InitializeAndSetContext3d( 5297 EXPECT_FALSE(output_surface_->InitializeAndSetContext3d(
5282 onscreen_context_provider_, offscreen_context_provider_)); 5298 onscreen_context_provider_, offscreen_context_provider_));
5283 EXPECT_FALSE(host_impl_->output_surface()->context_provider()); 5299 EXPECT_FALSE(host_impl_->output_surface()->context_provider());
5284 EXPECT_FALSE(host_impl_->offscreen_context_provider()); 5300 EXPECT_FALSE(host_impl_->offscreen_context_provider());
5301 EXPECT_FALSE(did_update_renderer_capabilities_);
5285 } 5302 }
5286 5303
5287 TEST_F(LayerTreeHostImplTestDeferredInitialize, Fails_OnscreenContext_2) { 5304 TEST_F(LayerTreeHostImplTestDeferredInitialize, Fails_OnscreenContext_2) {
5288 // Software draw. 5305 // Software draw.
5289 DrawFrame(); 5306 DrawFrame();
5290 5307
5291 EXPECT_FALSE(host_impl_->output_surface()->context_provider()); 5308 EXPECT_FALSE(host_impl_->output_surface()->context_provider());
5292 EXPECT_FALSE(host_impl_->offscreen_context_provider()); 5309 EXPECT_FALSE(host_impl_->offscreen_context_provider());
5293 5310
5294 onscreen_context_provider_->UnboundTestContext3d()->set_context_lost(true); 5311 onscreen_context_provider_->UnboundTestContext3d()->set_context_lost(true);
5295 5312
5296 // DeferredInitialize fails. 5313 // DeferredInitialize fails.
5314 did_update_renderer_capabilities_ = false;
5297 EXPECT_FALSE(output_surface_->InitializeAndSetContext3d( 5315 EXPECT_FALSE(output_surface_->InitializeAndSetContext3d(
5298 onscreen_context_provider_, offscreen_context_provider_)); 5316 onscreen_context_provider_, offscreen_context_provider_));
5299 EXPECT_FALSE(host_impl_->output_surface()->context_provider()); 5317 EXPECT_FALSE(host_impl_->output_surface()->context_provider());
5300 EXPECT_FALSE(host_impl_->offscreen_context_provider()); 5318 EXPECT_FALSE(host_impl_->offscreen_context_provider());
5319 EXPECT_FALSE(did_update_renderer_capabilities_);
5301 } 5320 }
5302 5321
5303 TEST_F(LayerTreeHostImplTestDeferredInitialize, Fails_OffscreenContext) { 5322 TEST_F(LayerTreeHostImplTestDeferredInitialize, Fails_OffscreenContext) {
5304 // Software draw. 5323 // Software draw.
5305 DrawFrame(); 5324 DrawFrame();
5306 5325
5307 EXPECT_FALSE(host_impl_->output_surface()->context_provider()); 5326 EXPECT_FALSE(host_impl_->output_surface()->context_provider());
5308 EXPECT_FALSE(host_impl_->offscreen_context_provider()); 5327 EXPECT_FALSE(host_impl_->offscreen_context_provider());
5309 5328
5310 // Fail initialization of the offscreen context. 5329 // Fail initialization of the offscreen context.
5311 onscreen_context_provider_->UnboundTestContext3d()->set_context_lost(true); 5330 onscreen_context_provider_->UnboundTestContext3d()->set_context_lost(true);
5312 5331
5313 // DeferredInitialize fails. 5332 // DeferredInitialize fails.
5333 did_update_renderer_capabilities_ = false;
5314 EXPECT_FALSE(output_surface_->InitializeAndSetContext3d( 5334 EXPECT_FALSE(output_surface_->InitializeAndSetContext3d(
5315 onscreen_context_provider_, offscreen_context_provider_)); 5335 onscreen_context_provider_, offscreen_context_provider_));
5316 EXPECT_FALSE(host_impl_->output_surface()->context_provider()); 5336 EXPECT_FALSE(host_impl_->output_surface()->context_provider());
5317 EXPECT_FALSE(host_impl_->offscreen_context_provider()); 5337 EXPECT_FALSE(host_impl_->offscreen_context_provider());
5338 EXPECT_FALSE(did_update_renderer_capabilities_);
5318 } 5339 }
5319 5340
5320 // Checks that we have a non-0 default allocation if we pass a context that 5341 // Checks that we have a non-0 default allocation if we pass a context that
5321 // doesn't support memory management extensions. 5342 // doesn't support memory management extensions.
5322 TEST_F(LayerTreeHostImplTest, DefaultMemoryAllocation) { 5343 TEST_F(LayerTreeHostImplTest, DefaultMemoryAllocation) {
5323 LayerTreeSettings settings; 5344 LayerTreeSettings settings;
5324 host_impl_ = LayerTreeHostImpl::Create( 5345 host_impl_ = LayerTreeHostImpl::Create(
5325 settings, this, &proxy_, &stats_instrumentation_, NULL, 0); 5346 settings, this, &proxy_, &stats_instrumentation_, NULL, 0);
5326 5347
5327 scoped_ptr<OutputSurface> output_surface( 5348 scoped_ptr<OutputSurface> output_surface(
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after
5772 &set_needs_redraw_count)); 5793 &set_needs_redraw_count));
5773 // Empty damage rect won't signal the monitor. 5794 // Empty damage rect won't signal the monitor.
5774 host_impl_->SetNeedsRedrawRect(gfx::Rect()); 5795 host_impl_->SetNeedsRedrawRect(gfx::Rect());
5775 EXPECT_EQ(0, set_needs_commit_count); 5796 EXPECT_EQ(0, set_needs_commit_count);
5776 EXPECT_EQ(2, set_needs_redraw_count); 5797 EXPECT_EQ(2, set_needs_redraw_count);
5777 } 5798 }
5778 } 5799 }
5779 5800
5780 } // namespace 5801 } // namespace
5781 } // namespace cc 5802 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698