1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "cc/test/test_context_support.h" 6 7 #include "base/bind.h" 8 #include "base/message_loop/message_loop.h" 9 10 namespace cc { 11 12 TestContextSupport::TestContextSupport() 13 : last_swap_type_(NO_SWAP), 14 weak_ptr_factory_(this) { 15 } 16 17 TestContextSupport::~TestContextSupport() {} 18 19 void TestContextSupport::SignalSyncPoint(uint32 sync_point, 20 const base::Closure& callback) { 21 sync_point_callbacks_.push_back(callback); 22 base::MessageLoop::current()->PostTask( 23 FROM_HERE, 24 base::Bind(&TestContextSupport::CallAllSyncPointCallbacks, 25 weak_ptr_factory_.GetWeakPtr())); 26 } 27 28 void TestContextSupport::SignalQuery(uint32 query, 29 const base::Closure& callback) { 30 sync_point_callbacks_.push_back(callback); 31 base::MessageLoop::current()->PostTask( 32 FROM_HERE, 33 base::Bind(&TestContextSupport::CallAllSyncPointCallbacks, 34 weak_ptr_factory_.GetWeakPtr())); 35 } 36 37 void TestContextSupport::SetSurfaceVisible(bool visible) { 38 if (!set_visible_callback_.is_null()) { 39 set_visible_callback_.Run(visible); 40 } 41 } 42 43 void TestContextSupport::CallAllSyncPointCallbacks() { 44 for (size_t i = 0; i < sync_point_callbacks_.size(); ++i) { 45 base::MessageLoop::current()->PostTask( 46 FROM_HERE, sync_point_callbacks_[i]); 47 } 48 sync_point_callbacks_.clear(); 49 } 50 51 void TestContextSupport::SetSurfaceVisibleCallback( 52 const SurfaceVisibleCallback& set_visible_callback) { 53 set_visible_callback_ = set_visible_callback; 54 } 55 56 void TestContextSupport::SetScheduleOverlayPlaneCallback( 57 const ScheduleOverlayPlaneCallback& schedule_overlay_plane_callback) { 58 schedule_overlay_plane_callback_ = schedule_overlay_plane_callback; 59 } 60 61 void TestContextSupport::Swap() { 62 last_swap_type_ = SWAP; 63 base::MessageLoop::current()->PostTask( 64 FROM_HERE, base::Bind(&TestContextSupport::OnSwapBuffersComplete, 65 weak_ptr_factory_.GetWeakPtr())); 66 } 67 68 void TestContextSupport::PartialSwapBuffers(const gfx::Rect& sub_buffer) { 69 last_swap_type_ = PARTIAL_SWAP; 70 last_partial_swap_rect_ = sub_buffer; 71 base::MessageLoop::current()->PostTask( 72 FROM_HERE, base::Bind(&TestContextSupport::OnSwapBuffersComplete, 73 weak_ptr_factory_.GetWeakPtr())); 74 } 75 76 void TestContextSupport::ScheduleOverlayPlane( 77 int plane_z_order, 78 gfx::OverlayTransform plane_transform, 79 unsigned overlay_texture_id, 80 const gfx::Rect& display_bounds, 81 const gfx::RectF& uv_rect) { 82 if (!schedule_overlay_plane_callback_.is_null()) { 83 schedule_overlay_plane_callback_.Run(plane_z_order, 84 plane_transform, 85 overlay_texture_id, 86 display_bounds, 87 uv_rect); 88 } 89 } 90 91 void TestContextSupport::SetSwapBuffersCompleteCallback( 92 const base::Closure& callback) { 93 swap_buffers_complete_callback_ = callback; 94 } 95 96 void TestContextSupport::OnSwapBuffersComplete() { 97 if (!swap_buffers_complete_callback_.is_null()) 98 swap_buffers_complete_callback_.Run(); 99 } 100 101 } // namespace cc 102