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

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

Issue 46163003: Consolidate test contexts and remove unused ones (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 1 month 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
« no previous file with comments | « cc/test/test_web_graphics_context_3d.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 2745 matching lines...) Expand 10 before | Expand all | Expand 10 after
2756 EXPECT_EQ(gfx::Vector2dF(), host_impl_->current_fling_velocity()); 2756 EXPECT_EQ(gfx::Vector2dF(), host_impl_->current_fling_velocity());
2757 2757
2758 // Even though the layer can't scroll the overscroll still happens. 2758 // Even though the layer can't scroll the overscroll still happens.
2759 EXPECT_EQ(InputHandler::ScrollStarted, 2759 EXPECT_EQ(InputHandler::ScrollStarted,
2760 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Wheel)); 2760 host_impl_->ScrollBegin(gfx::Point(), InputHandler::Wheel));
2761 host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, 10)); 2761 host_impl_->ScrollBy(gfx::Point(), gfx::Vector2d(0, 10));
2762 EXPECT_EQ(gfx::Vector2dF(0, 10), host_impl_->accumulated_root_overscroll()); 2762 EXPECT_EQ(gfx::Vector2dF(0, 10), host_impl_->accumulated_root_overscroll());
2763 EXPECT_EQ(gfx::Vector2dF(), host_impl_->current_fling_velocity()); 2763 EXPECT_EQ(gfx::Vector2dF(), host_impl_->current_fling_velocity());
2764 } 2764 }
2765 2765
2766 class BlendStateTrackerContext: public TestWebGraphicsContext3D {
2767 public:
2768 BlendStateTrackerContext() : blend_(false) {}
2769
2770 virtual void enable(WebKit::WGC3Denum cap) OVERRIDE {
2771 if (cap == GL_BLEND)
2772 blend_ = true;
2773 }
2774
2775 virtual void disable(WebKit::WGC3Denum cap) OVERRIDE {
2776 if (cap == GL_BLEND)
2777 blend_ = false;
2778 }
2779
2780 bool blend() const { return blend_; }
2781
2782 private:
2783 bool blend_;
2784 };
2785
2786 class BlendStateCheckLayer : public LayerImpl { 2766 class BlendStateCheckLayer : public LayerImpl {
2787 public: 2767 public:
2788 static scoped_ptr<LayerImpl> Create(LayerTreeImpl* tree_impl, 2768 static scoped_ptr<LayerImpl> Create(LayerTreeImpl* tree_impl,
2789 int id, 2769 int id,
2790 ResourceProvider* resource_provider) { 2770 ResourceProvider* resource_provider) {
2791 return scoped_ptr<LayerImpl>(new BlendStateCheckLayer(tree_impl, 2771 return scoped_ptr<LayerImpl>(new BlendStateCheckLayer(tree_impl,
2792 id, 2772 id,
2793 resource_provider)); 2773 resource_provider));
2794 } 2774 }
2795 2775
(...skipping 573 matching lines...) Expand 10 before | Expand all | Expand 10 after
3369 host_impl_->CreatePendingTree(); 3349 host_impl_->CreatePendingTree();
3370 host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_)); 3350 host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_));
3371 EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid()); 3351 EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid());
3372 3352
3373 SetupActiveTreeLayers(); 3353 SetupActiveTreeLayers();
3374 TestEmptyLayer(); 3354 TestEmptyLayer();
3375 TestLayerInMiddleOfViewport(); 3355 TestLayerInMiddleOfViewport();
3376 TestLayerIsLargerThanViewport(); 3356 TestLayerIsLargerThanViewport();
3377 } 3357 }
3378 3358
3379 class ReshapeTrackerContext: public TestWebGraphicsContext3D {
3380 public:
3381 ReshapeTrackerContext()
3382 : reshape_called_(false),
3383 last_reshape_width_(-1),
3384 last_reshape_height_(-1),
3385 last_reshape_scale_factor_(-1.f) {
3386 }
3387
3388 virtual void reshapeWithScaleFactor(
3389 int width, int height, float scale_factor) OVERRIDE {
3390 reshape_called_ = true;
3391 last_reshape_width_ = width;
3392 last_reshape_height_ = height;
3393 last_reshape_scale_factor_ = scale_factor;
3394 }
3395
3396 bool reshape_called() const { return reshape_called_; }
3397 void clear_reshape_called() { reshape_called_ = false; }
3398 int last_reshape_width() { return last_reshape_width_; }
3399 int last_reshape_height() { return last_reshape_height_; }
3400 int last_reshape_scale_factor() { return last_reshape_scale_factor_; }
3401
3402 private:
3403 bool reshape_called_;
3404 int last_reshape_width_;
3405 int last_reshape_height_;
3406 float last_reshape_scale_factor_;
3407 };
3408
3409 class FakeDrawableLayerImpl: public LayerImpl { 3359 class FakeDrawableLayerImpl: public LayerImpl {
3410 public: 3360 public:
3411 static scoped_ptr<LayerImpl> Create(LayerTreeImpl* tree_impl, int id) { 3361 static scoped_ptr<LayerImpl> Create(LayerTreeImpl* tree_impl, int id) {
3412 return scoped_ptr<LayerImpl>(new FakeDrawableLayerImpl(tree_impl, id)); 3362 return scoped_ptr<LayerImpl>(new FakeDrawableLayerImpl(tree_impl, id));
3413 } 3363 }
3414 protected: 3364 protected:
3415 FakeDrawableLayerImpl(LayerTreeImpl* tree_impl, int id) 3365 FakeDrawableLayerImpl(LayerTreeImpl* tree_impl, int id)
3416 : LayerImpl(tree_impl, id) {} 3366 : LayerImpl(tree_impl, id) {}
3417 }; 3367 };
3418 3368
3419 // Only reshape when we know we are going to draw. Otherwise, the reshape 3369 // Only reshape when we know we are going to draw. Otherwise, the reshape
3420 // can leave the window at the wrong size if we never draw and the proper 3370 // can leave the window at the wrong size if we never draw and the proper
3421 // viewport size is never set. 3371 // viewport size is never set.
3422 TEST_F(LayerTreeHostImplTest, ReshapeNotCalledUntilDraw) { 3372 TEST_F(LayerTreeHostImplTest, ReshapeNotCalledUntilDraw) {
3423 scoped_ptr<ReshapeTrackerContext> owned_reshape_tracker( 3373 scoped_refptr<TestContextProvider> provider(TestContextProvider::Create());
3424 new ReshapeTrackerContext); 3374 scoped_ptr<OutputSurface> output_surface(
3425 ReshapeTrackerContext* reshape_tracker = owned_reshape_tracker.get(); 3375 FakeOutputSurface::Create3d(provider));
3426 scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d(
3427 owned_reshape_tracker.PassAs<TestWebGraphicsContext3D>()));
3428 host_impl_->InitializeRenderer(output_surface.Pass()); 3376 host_impl_->InitializeRenderer(output_surface.Pass());
3429 3377
3430 scoped_ptr<LayerImpl> root = 3378 scoped_ptr<LayerImpl> root =
3431 FakeDrawableLayerImpl::Create(host_impl_->active_tree(), 1); 3379 FakeDrawableLayerImpl::Create(host_impl_->active_tree(), 1);
3432 root->SetAnchorPoint(gfx::PointF()); 3380 root->SetAnchorPoint(gfx::PointF());
3433 root->SetBounds(gfx::Size(10, 10)); 3381 root->SetBounds(gfx::Size(10, 10));
3434 root->SetContentBounds(gfx::Size(10, 10)); 3382 root->SetContentBounds(gfx::Size(10, 10));
3435 root->SetDrawsContent(true); 3383 root->SetDrawsContent(true);
3436 host_impl_->active_tree()->SetRootLayer(root.Pass()); 3384 host_impl_->active_tree()->SetRootLayer(root.Pass());
3437 EXPECT_FALSE(reshape_tracker->reshape_called()); 3385 EXPECT_FALSE(provider->TestContext3d()->reshape_called());
3438 reshape_tracker->clear_reshape_called(); 3386 provider->TestContext3d()->clear_reshape_called();
3439 3387
3440 LayerTreeHostImpl::FrameData frame; 3388 LayerTreeHostImpl::FrameData frame;
3441 host_impl_->SetViewportSize(gfx::Size(10, 10)); 3389 host_impl_->SetViewportSize(gfx::Size(10, 10));
3442 host_impl_->SetDeviceScaleFactor(1.f); 3390 host_impl_->SetDeviceScaleFactor(1.f);
3443 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); 3391 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
3444 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 3392 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
3445 EXPECT_TRUE(reshape_tracker->reshape_called()); 3393 EXPECT_TRUE(provider->TestContext3d()->reshape_called());
3446 EXPECT_EQ(reshape_tracker->last_reshape_width(), 10); 3394 EXPECT_EQ(provider->TestContext3d()->width(), 10);
3447 EXPECT_EQ(reshape_tracker->last_reshape_height(), 10); 3395 EXPECT_EQ(provider->TestContext3d()->height(), 10);
3448 EXPECT_EQ(reshape_tracker->last_reshape_scale_factor(), 1.f); 3396 EXPECT_EQ(provider->TestContext3d()->scale_factor(), 1.f);
3449 host_impl_->DidDrawAllLayers(frame); 3397 host_impl_->DidDrawAllLayers(frame);
3450 reshape_tracker->clear_reshape_called(); 3398 provider->TestContext3d()->clear_reshape_called();
3451 3399
3452 host_impl_->SetViewportSize(gfx::Size(20, 30)); 3400 host_impl_->SetViewportSize(gfx::Size(20, 30));
3453 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); 3401 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
3454 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 3402 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
3455 EXPECT_TRUE(reshape_tracker->reshape_called()); 3403 EXPECT_TRUE(provider->TestContext3d()->reshape_called());
3456 EXPECT_EQ(reshape_tracker->last_reshape_width(), 20); 3404 EXPECT_EQ(provider->TestContext3d()->width(), 20);
3457 EXPECT_EQ(reshape_tracker->last_reshape_height(), 30); 3405 EXPECT_EQ(provider->TestContext3d()->height(), 30);
3458 EXPECT_EQ(reshape_tracker->last_reshape_scale_factor(), 1.f); 3406 EXPECT_EQ(provider->TestContext3d()->scale_factor(), 1.f);
3459 host_impl_->DidDrawAllLayers(frame); 3407 host_impl_->DidDrawAllLayers(frame);
3460 reshape_tracker->clear_reshape_called(); 3408 provider->TestContext3d()->clear_reshape_called();
3461 3409
3462 host_impl_->SetDeviceScaleFactor(2.f); 3410 host_impl_->SetDeviceScaleFactor(2.f);
3463 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); 3411 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
3464 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 3412 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
3465 EXPECT_TRUE(reshape_tracker->reshape_called()); 3413 EXPECT_TRUE(provider->TestContext3d()->reshape_called());
3466 EXPECT_EQ(reshape_tracker->last_reshape_width(), 20); 3414 EXPECT_EQ(provider->TestContext3d()->width(), 20);
3467 EXPECT_EQ(reshape_tracker->last_reshape_height(), 30); 3415 EXPECT_EQ(provider->TestContext3d()->height(), 30);
3468 EXPECT_EQ(reshape_tracker->last_reshape_scale_factor(), 2.f); 3416 EXPECT_EQ(provider->TestContext3d()->scale_factor(), 2.f);
3469 host_impl_->DidDrawAllLayers(frame); 3417 host_impl_->DidDrawAllLayers(frame);
3470 reshape_tracker->clear_reshape_called(); 3418 provider->TestContext3d()->clear_reshape_called();
3471 } 3419 }
3472 3420
3473 class SwapTrackerContext : public TestWebGraphicsContext3D {
3474 public:
3475 SwapTrackerContext()
3476 : last_update_type_(NoUpdate) {
3477 test_capabilities_.post_sub_buffer = true;
3478 test_capabilities_.set_visibility = true;
3479 }
3480
3481 virtual void prepareTexture() OVERRIDE {
3482 update_rect_ = gfx::Rect(width_, height_);
3483 last_update_type_ = PrepareTexture;
3484 }
3485
3486 virtual void postSubBufferCHROMIUM(int x, int y, int width, int height)
3487 OVERRIDE {
3488 update_rect_ = gfx::Rect(x, y, width, height);
3489 last_update_type_ = PostSubBuffer;
3490 }
3491
3492 gfx::Rect update_rect() const { return update_rect_; }
3493
3494 enum UpdateType {
3495 NoUpdate = 0,
3496 PrepareTexture,
3497 PostSubBuffer
3498 };
3499
3500 UpdateType last_update_type() {
3501 return last_update_type_;
3502 }
3503
3504 private:
3505 gfx::Rect update_rect_;
3506 UpdateType last_update_type_;
3507 };
3508
3509 // Make sure damage tracking propagates all the way to the graphics context, 3421 // Make sure damage tracking propagates all the way to the graphics context,
3510 // where it should request to swap only the sub-buffer that is damaged. 3422 // where it should request to swap only the sub-buffer that is damaged.
3511 TEST_F(LayerTreeHostImplTest, PartialSwapReceivesDamageRect) { 3423 TEST_F(LayerTreeHostImplTest, PartialSwapReceivesDamageRect) {
3512 scoped_ptr<SwapTrackerContext> context(new SwapTrackerContext); 3424 scoped_refptr<TestContextProvider> provider(
3513 SwapTrackerContext* swap_tracker = context.get(); 3425 TestContextProvider::Create());
3426 scoped_ptr<OutputSurface> output_surface(
3427 FakeOutputSurface::Create3d(provider));
3514 3428
3515 scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d( 3429 provider->BindToCurrentThread();
3516 context.PassAs<TestWebGraphicsContext3D>())); 3430 TestWebGraphicsContext3D* context = provider->TestContext3d();
3431 context->set_have_post_sub_buffer(true);
3517 3432
3518 // This test creates its own LayerTreeHostImpl, so 3433 // This test creates its own LayerTreeHostImpl, so
3519 // that we can force partial swap enabled. 3434 // that we can force partial swap enabled.
3520 LayerTreeSettings settings; 3435 LayerTreeSettings settings;
3521 settings.partial_swap_enabled = true; 3436 settings.partial_swap_enabled = true;
3522 scoped_ptr<LayerTreeHostImpl> layer_tree_host_impl = 3437 scoped_ptr<LayerTreeHostImpl> layer_tree_host_impl =
3523 LayerTreeHostImpl::Create( 3438 LayerTreeHostImpl::Create(
3524 settings, this, &proxy_, &stats_instrumentation_, NULL); 3439 settings, this, &proxy_, &stats_instrumentation_, NULL);
3525 layer_tree_host_impl->InitializeRenderer(output_surface.Pass()); 3440 layer_tree_host_impl->InitializeRenderer(output_surface.Pass());
3526 layer_tree_host_impl->SetViewportSize(gfx::Size(500, 500)); 3441 layer_tree_host_impl->SetViewportSize(gfx::Size(500, 500));
(...skipping 14 matching lines...) Expand all
3541 root->AddChild(child.Pass()); 3456 root->AddChild(child.Pass());
3542 layer_tree_host_impl->active_tree()->SetRootLayer(root.Pass()); 3457 layer_tree_host_impl->active_tree()->SetRootLayer(root.Pass());
3543 3458
3544 LayerTreeHostImpl::FrameData frame; 3459 LayerTreeHostImpl::FrameData frame;
3545 3460
3546 // First frame, the entire screen should get swapped. 3461 // First frame, the entire screen should get swapped.
3547 EXPECT_TRUE(layer_tree_host_impl->PrepareToDraw(&frame, gfx::Rect())); 3462 EXPECT_TRUE(layer_tree_host_impl->PrepareToDraw(&frame, gfx::Rect()));
3548 layer_tree_host_impl->DrawLayers(&frame, gfx::FrameTime::Now()); 3463 layer_tree_host_impl->DrawLayers(&frame, gfx::FrameTime::Now());
3549 layer_tree_host_impl->DidDrawAllLayers(frame); 3464 layer_tree_host_impl->DidDrawAllLayers(frame);
3550 layer_tree_host_impl->SwapBuffers(frame); 3465 layer_tree_host_impl->SwapBuffers(frame);
3551 gfx::Rect actual_swap_rect = swap_tracker->update_rect(); 3466 gfx::Rect actual_swap_rect = context->update_rect();
3552 gfx::Rect expected_swap_rect = gfx::Rect(0, 0, 500, 500); 3467 gfx::Rect expected_swap_rect = gfx::Rect(0, 0, 500, 500);
3553 EXPECT_EQ(expected_swap_rect.x(), actual_swap_rect.x()); 3468 EXPECT_EQ(expected_swap_rect.x(), actual_swap_rect.x());
3554 EXPECT_EQ(expected_swap_rect.y(), actual_swap_rect.y()); 3469 EXPECT_EQ(expected_swap_rect.y(), actual_swap_rect.y());
3555 EXPECT_EQ(expected_swap_rect.width(), actual_swap_rect.width()); 3470 EXPECT_EQ(expected_swap_rect.width(), actual_swap_rect.width());
3556 EXPECT_EQ(expected_swap_rect.height(), actual_swap_rect.height()); 3471 EXPECT_EQ(expected_swap_rect.height(), actual_swap_rect.height());
3557 EXPECT_EQ(swap_tracker->last_update_type(), 3472 EXPECT_EQ(context->last_update_type(),
3558 SwapTrackerContext::PrepareTexture); 3473 TestWebGraphicsContext3D::PrepareTexture);
3559 // Second frame, only the damaged area should get swapped. Damage should be 3474 // Second frame, only the damaged area should get swapped. Damage should be
3560 // the union of old and new child rects. 3475 // the union of old and new child rects.
3561 // expected damage rect: gfx::Rect(26, 28); 3476 // expected damage rect: gfx::Rect(26, 28);
3562 // expected swap rect: vertically flipped, with origin at bottom left corner. 3477 // expected swap rect: vertically flipped, with origin at bottom left corner.
3563 layer_tree_host_impl->active_tree()->root_layer()->children()[0]->SetPosition( 3478 layer_tree_host_impl->active_tree()->root_layer()->children()[0]->SetPosition(
3564 gfx::PointF()); 3479 gfx::PointF());
3565 EXPECT_TRUE(layer_tree_host_impl->PrepareToDraw(&frame, gfx::Rect())); 3480 EXPECT_TRUE(layer_tree_host_impl->PrepareToDraw(&frame, gfx::Rect()));
3566 layer_tree_host_impl->DrawLayers(&frame, gfx::FrameTime::Now()); 3481 layer_tree_host_impl->DrawLayers(&frame, gfx::FrameTime::Now());
3567 host_impl_->DidDrawAllLayers(frame); 3482 host_impl_->DidDrawAllLayers(frame);
3568 layer_tree_host_impl->SwapBuffers(frame); 3483 layer_tree_host_impl->SwapBuffers(frame);
3569 actual_swap_rect = swap_tracker->update_rect(); 3484 actual_swap_rect = context->update_rect();
3570 expected_swap_rect = gfx::Rect(0, 500-28, 26, 28); 3485 expected_swap_rect = gfx::Rect(0, 500-28, 26, 28);
3571 EXPECT_EQ(expected_swap_rect.x(), actual_swap_rect.x()); 3486 EXPECT_EQ(expected_swap_rect.x(), actual_swap_rect.x());
3572 EXPECT_EQ(expected_swap_rect.y(), actual_swap_rect.y()); 3487 EXPECT_EQ(expected_swap_rect.y(), actual_swap_rect.y());
3573 EXPECT_EQ(expected_swap_rect.width(), actual_swap_rect.width()); 3488 EXPECT_EQ(expected_swap_rect.width(), actual_swap_rect.width());
3574 EXPECT_EQ(expected_swap_rect.height(), actual_swap_rect.height()); 3489 EXPECT_EQ(expected_swap_rect.height(), actual_swap_rect.height());
3575 EXPECT_EQ(swap_tracker->last_update_type(), 3490 EXPECT_EQ(context->last_update_type(),
3576 SwapTrackerContext::PostSubBuffer); 3491 TestWebGraphicsContext3D::PostSubBuffer);
3577 3492
3578 // Make sure that partial swap is constrained to the viewport dimensions 3493 // Make sure that partial swap is constrained to the viewport dimensions
3579 // expected damage rect: gfx::Rect(500, 500); 3494 // expected damage rect: gfx::Rect(500, 500);
3580 // expected swap rect: flipped damage rect, but also clamped to viewport 3495 // expected swap rect: flipped damage rect, but also clamped to viewport
3581 layer_tree_host_impl->SetViewportSize(gfx::Size(10, 10)); 3496 layer_tree_host_impl->SetViewportSize(gfx::Size(10, 10));
3582 // This will damage everything. 3497 // This will damage everything.
3583 layer_tree_host_impl->active_tree()->root_layer()->SetBackgroundColor( 3498 layer_tree_host_impl->active_tree()->root_layer()->SetBackgroundColor(
3584 SK_ColorBLACK); 3499 SK_ColorBLACK);
3585 EXPECT_TRUE(layer_tree_host_impl->PrepareToDraw(&frame, gfx::Rect())); 3500 EXPECT_TRUE(layer_tree_host_impl->PrepareToDraw(&frame, gfx::Rect()));
3586 layer_tree_host_impl->DrawLayers(&frame, gfx::FrameTime::Now()); 3501 layer_tree_host_impl->DrawLayers(&frame, gfx::FrameTime::Now());
3587 host_impl_->DidDrawAllLayers(frame); 3502 host_impl_->DidDrawAllLayers(frame);
3588 layer_tree_host_impl->SwapBuffers(frame); 3503 layer_tree_host_impl->SwapBuffers(frame);
3589 actual_swap_rect = swap_tracker->update_rect(); 3504 actual_swap_rect = context->update_rect();
3590 expected_swap_rect = gfx::Rect(10, 10); 3505 expected_swap_rect = gfx::Rect(10, 10);
3591 EXPECT_EQ(expected_swap_rect.x(), actual_swap_rect.x()); 3506 EXPECT_EQ(expected_swap_rect.x(), actual_swap_rect.x());
3592 EXPECT_EQ(expected_swap_rect.y(), actual_swap_rect.y()); 3507 EXPECT_EQ(expected_swap_rect.y(), actual_swap_rect.y());
3593 EXPECT_EQ(expected_swap_rect.width(), actual_swap_rect.width()); 3508 EXPECT_EQ(expected_swap_rect.width(), actual_swap_rect.width());
3594 EXPECT_EQ(expected_swap_rect.height(), actual_swap_rect.height()); 3509 EXPECT_EQ(expected_swap_rect.height(), actual_swap_rect.height());
3595 EXPECT_EQ(swap_tracker->last_update_type(), 3510 EXPECT_EQ(context->last_update_type(),
3596 SwapTrackerContext::PrepareTexture); 3511 TestWebGraphicsContext3D::PrepareTexture);
3597 } 3512 }
3598 3513
3599 TEST_F(LayerTreeHostImplTest, RootLayerDoesntCreateExtraSurface) { 3514 TEST_F(LayerTreeHostImplTest, RootLayerDoesntCreateExtraSurface) {
3600 scoped_ptr<LayerImpl> root = 3515 scoped_ptr<LayerImpl> root =
3601 FakeDrawableLayerImpl::Create(host_impl_->active_tree(), 1); 3516 FakeDrawableLayerImpl::Create(host_impl_->active_tree(), 1);
3602 scoped_ptr<LayerImpl> child = 3517 scoped_ptr<LayerImpl> child =
3603 FakeDrawableLayerImpl::Create(host_impl_->active_tree(), 2); 3518 FakeDrawableLayerImpl::Create(host_impl_->active_tree(), 2);
3604 child->SetAnchorPoint(gfx::PointF()); 3519 child->SetAnchorPoint(gfx::PointF());
3605 child->SetBounds(gfx::Size(10, 10)); 3520 child->SetBounds(gfx::Size(10, 10));
3606 child->SetContentBounds(gfx::Size(10, 10)); 3521 child->SetContentBounds(gfx::Size(10, 10));
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
3800 harness.MustDrawSolidQuad(); 3715 harness.MustDrawSolidQuad();
3801 { 3716 {
3802 LayerTreeHostImpl::FrameData frame; 3717 LayerTreeHostImpl::FrameData frame;
3803 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect())); 3718 EXPECT_TRUE(host_impl_->PrepareToDraw(&frame, gfx::Rect()));
3804 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); 3719 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now());
3805 host_impl_->DidDrawAllLayers(frame); 3720 host_impl_->DidDrawAllLayers(frame);
3806 } 3721 }
3807 Mock::VerifyAndClearExpectations(&mock_context); 3722 Mock::VerifyAndClearExpectations(&mock_context);
3808 } 3723 }
3809 3724
3810 class PartialSwapContext : public TestWebGraphicsContext3D {
3811 public:
3812 PartialSwapContext() {
3813 test_capabilities_.post_sub_buffer = true;
3814 }
3815
3816 // Unlimited texture size.
3817 virtual void getIntegerv(WebKit::WGC3Denum pname, WebKit::WGC3Dint* value)
3818 OVERRIDE {
3819 if (pname == GL_MAX_TEXTURE_SIZE)
3820 *value = 8192;
3821 else if (pname == GL_ACTIVE_TEXTURE)
3822 *value = GL_TEXTURE0;
3823 }
3824 };
3825
3826 static scoped_ptr<LayerTreeHostImpl> SetupLayersForOpacity( 3725 static scoped_ptr<LayerTreeHostImpl> SetupLayersForOpacity(
3827 bool partial_swap, 3726 bool partial_swap,
3828 LayerTreeHostImplClient* client, 3727 LayerTreeHostImplClient* client,
3829 Proxy* proxy, 3728 Proxy* proxy,
3830 RenderingStatsInstrumentation* stats_instrumentation) { 3729 RenderingStatsInstrumentation* stats_instrumentation) {
3831 scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d( 3730 scoped_refptr<TestContextProvider> provider(TestContextProvider::Create());
3832 scoped_ptr<TestWebGraphicsContext3D>(new PartialSwapContext))); 3731 scoped_ptr<OutputSurface> output_surface(
3732 FakeOutputSurface::Create3d(provider));
3733 provider->BindToCurrentThread();
3734 provider->TestContext3d()->set_have_post_sub_buffer(true);
3833 3735
3834 LayerTreeSettings settings; 3736 LayerTreeSettings settings;
3835 settings.partial_swap_enabled = partial_swap; 3737 settings.partial_swap_enabled = partial_swap;
3836 scoped_ptr<LayerTreeHostImpl> my_host_impl = LayerTreeHostImpl::Create( 3738 scoped_ptr<LayerTreeHostImpl> my_host_impl = LayerTreeHostImpl::Create(
3837 settings, client, proxy, stats_instrumentation, NULL); 3739 settings, client, proxy, stats_instrumentation, NULL);
3838 my_host_impl->InitializeRenderer(output_surface.Pass()); 3740 my_host_impl->InitializeRenderer(output_surface.Pass());
3839 my_host_impl->SetViewportSize(gfx::Size(100, 100)); 3741 my_host_impl->SetViewportSize(gfx::Size(100, 100));
3840 3742
3841 /* 3743 /*
3842 Layers are created as follows: 3744 Layers are created as follows:
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
3934 EXPECT_EQ(DrawQuad::SOLID_COLOR, 3836 EXPECT_EQ(DrawQuad::SOLID_COLOR,
3935 frame.render_passes[0]->quad_list[0]->material); 3837 frame.render_passes[0]->quad_list[0]->material);
3936 EXPECT_EQ(DrawQuad::RENDER_PASS, 3838 EXPECT_EQ(DrawQuad::RENDER_PASS,
3937 frame.render_passes[1]->quad_list[0]->material); 3839 frame.render_passes[1]->quad_list[0]->material);
3938 3840
3939 my_host_impl->DrawLayers(&frame, gfx::FrameTime::Now()); 3841 my_host_impl->DrawLayers(&frame, gfx::FrameTime::Now());
3940 my_host_impl->DidDrawAllLayers(frame); 3842 my_host_impl->DidDrawAllLayers(frame);
3941 } 3843 }
3942 } 3844 }
3943 3845
3944 // Fake WebKit::WebGraphicsContext3D that tracks the number of textures in use.
3945 class TrackingWebGraphicsContext3D : public TestWebGraphicsContext3D {
3946 public:
3947 TrackingWebGraphicsContext3D()
3948 : TestWebGraphicsContext3D(),
3949 num_textures_(0) {
3950 test_capabilities_.iosurface = true;
3951 test_capabilities_.texture_rectangle = true;
3952 }
3953
3954 virtual WebKit::WebGLId createTexture() OVERRIDE {
3955 WebKit::WebGLId id = TestWebGraphicsContext3D::createTexture();
3956
3957 textures_[id] = true;
3958 ++num_textures_;
3959 return id;
3960 }
3961
3962 virtual void deleteTexture(WebKit::WebGLId id) OVERRIDE {
3963 if (textures_.find(id) == textures_.end())
3964 return;
3965
3966 textures_[id] = false;
3967 --num_textures_;
3968 }
3969
3970 unsigned num_textures() const { return num_textures_; }
3971
3972 private:
3973 base::hash_map<WebKit::WebGLId, bool> textures_;
3974 unsigned num_textures_;
3975 };
3976
3977 TEST_F(LayerTreeHostImplTest, LayersFreeTextures) { 3846 TEST_F(LayerTreeHostImplTest, LayersFreeTextures) {
3978 scoped_ptr<TestWebGraphicsContext3D> context = 3847 scoped_ptr<TestWebGraphicsContext3D> context =
3979 TestWebGraphicsContext3D::Create(); 3848 TestWebGraphicsContext3D::Create();
3980 TestWebGraphicsContext3D* context3d = context.get(); 3849 TestWebGraphicsContext3D* context3d = context.get();
3981 scoped_ptr<OutputSurface> output_surface( 3850 scoped_ptr<OutputSurface> output_surface(
3982 FakeOutputSurface::Create3d(context.Pass())); 3851 FakeOutputSurface::Create3d(context.Pass()));
3983 host_impl_->InitializeRenderer(output_surface.Pass()); 3852 host_impl_->InitializeRenderer(output_surface.Pass());
3984 3853
3985 scoped_ptr<LayerImpl> root_layer = 3854 scoped_ptr<LayerImpl> root_layer =
3986 LayerImpl::Create(host_impl_->active_tree(), 1); 3855 LayerImpl::Create(host_impl_->active_tree(), 1);
(...skipping 1472 matching lines...) Expand 10 before | Expand all | Expand 10 after
5459 // The root should have scrolled. 5328 // The root should have scrolled.
5460 ASSERT_EQ(2u, scroll_info->scrolls.size()); 5329 ASSERT_EQ(2u, scroll_info->scrolls.size());
5461 ExpectContains(*scroll_info.get(), 5330 ExpectContains(*scroll_info.get(),
5462 host_impl_->active_tree()->root_layer()->id(), 5331 host_impl_->active_tree()->root_layer()->id(),
5463 gfx::Vector2d(0, 10)); 5332 gfx::Vector2d(0, 10));
5464 } 5333 }
5465 } 5334 }
5466 5335
5467 } // namespace 5336 } // namespace
5468 } // namespace cc 5337 } // namespace cc
OLDNEW
« no previous file with comments | « cc/test/test_web_graphics_context_3d.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698