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 10namespace cc { 11 12TestContextSupport::TestContextSupport() 13 : last_swap_type_(NO_SWAP), 14 weak_ptr_factory_(this) { 15} 16 17TestContextSupport::~TestContextSupport() {} 18 19void 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 28void 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 37void TestContextSupport::SetSurfaceVisible(bool visible) { 38 if (!set_visible_callback_.is_null()) { 39 set_visible_callback_.Run(visible); 40 } 41} 42 43void 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 51void TestContextSupport::SetSurfaceVisibleCallback( 52 const SurfaceVisibleCallback& set_visible_callback) { 53 set_visible_callback_ = set_visible_callback; 54} 55 56void TestContextSupport::SetScheduleOverlayPlaneCallback( 57 const ScheduleOverlayPlaneCallback& schedule_overlay_plane_callback) { 58 schedule_overlay_plane_callback_ = schedule_overlay_plane_callback; 59} 60 61void 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 68uint32 TestContextSupport::InsertFutureSyncPointCHROMIUM() { 69 NOTIMPLEMENTED(); 70 return 0; 71} 72 73void TestContextSupport::RetireSyncPointCHROMIUM(uint32 sync_point) { 74 NOTIMPLEMENTED(); 75} 76 77void TestContextSupport::PartialSwapBuffers(const gfx::Rect& sub_buffer) { 78 last_swap_type_ = PARTIAL_SWAP; 79 last_partial_swap_rect_ = sub_buffer; 80 base::MessageLoop::current()->PostTask( 81 FROM_HERE, base::Bind(&TestContextSupport::OnSwapBuffersComplete, 82 weak_ptr_factory_.GetWeakPtr())); 83} 84 85void TestContextSupport::ScheduleOverlayPlane( 86 int plane_z_order, 87 gfx::OverlayTransform plane_transform, 88 unsigned overlay_texture_id, 89 const gfx::Rect& display_bounds, 90 const gfx::RectF& uv_rect) { 91 if (!schedule_overlay_plane_callback_.is_null()) { 92 schedule_overlay_plane_callback_.Run(plane_z_order, 93 plane_transform, 94 overlay_texture_id, 95 display_bounds, 96 uv_rect); 97 } 98} 99 100void TestContextSupport::SetSwapBuffersCompleteCallback( 101 const base::Closure& callback) { 102 swap_buffers_complete_callback_ = callback; 103} 104 105void TestContextSupport::OnSwapBuffersComplete() { 106 if (!swap_buffers_complete_callback_.is_null()) 107 swap_buffers_complete_callback_.Run(); 108} 109 110} // namespace cc 111