18bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 28bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 38bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)// found in the LICENSE file. 48bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 50f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "cc/test/test_context_support.h" 68bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 7a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "base/bind.h" 88bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/message_loop/message_loop.h" 98bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)namespace cc { 118bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)TestContextSupport::TestContextSupport() 13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) : last_swap_type_(NO_SWAP), 14a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) weak_ptr_factory_(this) { 15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 16a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 178bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)TestContextSupport::~TestContextSupport() {} 188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void TestContextSupport::SignalSyncPoint(uint32 sync_point, 208bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const base::Closure& callback) { 218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) sync_point_callbacks_.push_back(callback); 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::MessageLoop::current()->PostTask( 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) FROM_HERE, 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Bind(&TestContextSupport::CallAllSyncPointCallbacks, 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) weak_ptr_factory_.GetWeakPtr())); 268bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 278bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 288bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void TestContextSupport::SignalQuery(uint32 query, 298bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const base::Closure& callback) { 308bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) sync_point_callbacks_.push_back(callback); 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::MessageLoop::current()->PostTask( 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) FROM_HERE, 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Bind(&TestContextSupport::CallAllSyncPointCallbacks, 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) weak_ptr_factory_.GetWeakPtr())); 358bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 368bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 37a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void TestContextSupport::SetSurfaceVisible(bool visible) { 38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (!set_visible_callback_.is_null()) { 39a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) set_visible_callback_.Run(visible); 40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void TestContextSupport::CallAllSyncPointCallbacks() { 448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) for (size_t i = 0; i < sync_point_callbacks_.size(); ++i) { 458bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::MessageLoop::current()->PostTask( 468bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) FROM_HERE, sync_point_callbacks_[i]); 478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) sync_point_callbacks_.clear(); 498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void TestContextSupport::SetSurfaceVisibleCallback( 52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const SurfaceVisibleCallback& set_visible_callback) { 53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) set_visible_callback_ = set_visible_callback; 54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid TestContextSupport::SetScheduleOverlayPlaneCallback( 57effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const ScheduleOverlayPlaneCallback& schedule_overlay_plane_callback) { 58effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch schedule_overlay_plane_callback_ = schedule_overlay_plane_callback; 59effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 60effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 61a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void TestContextSupport::Swap() { 62a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) last_swap_type_ = SWAP; 63a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::MessageLoop::current()->PostTask( 64a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) FROM_HERE, base::Bind(&TestContextSupport::OnSwapBuffersComplete, 65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) weak_ptr_factory_.GetWeakPtr())); 66a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdochuint32 TestContextSupport::InsertFutureSyncPointCHROMIUM() { 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch NOTIMPLEMENTED(); 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return 0; 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid TestContextSupport::RetireSyncPointCHROMIUM(uint32 sync_point) { 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch NOTIMPLEMENTED(); 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TestContextSupport::PartialSwapBuffers(const gfx::Rect& sub_buffer) { 78a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) last_swap_type_ = PARTIAL_SWAP; 79a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) last_partial_swap_rect_ = sub_buffer; 80a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::MessageLoop::current()->PostTask( 81a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) FROM_HERE, base::Bind(&TestContextSupport::OnSwapBuffersComplete, 82a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) weak_ptr_factory_.GetWeakPtr())); 83a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 84a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 85c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid TestContextSupport::ScheduleOverlayPlane( 86c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch int plane_z_order, 87c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch gfx::OverlayTransform plane_transform, 88c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch unsigned overlay_texture_id, 89c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const gfx::Rect& display_bounds, 90c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const gfx::RectF& uv_rect) { 91effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (!schedule_overlay_plane_callback_.is_null()) { 92effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch schedule_overlay_plane_callback_.Run(plane_z_order, 93effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch plane_transform, 94effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch overlay_texture_id, 95effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch display_bounds, 96effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch uv_rect); 97effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 98effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 99effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 100a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void TestContextSupport::SetSwapBuffersCompleteCallback( 101a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::Closure& callback) { 102a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) swap_buffers_complete_callback_ = callback; 103a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 104a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 105a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void TestContextSupport::OnSwapBuffersComplete() { 106a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (!swap_buffers_complete_callback_.is_null()) 107a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) swap_buffers_complete_callback_.Run(); 108a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 109a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} // namespace cc 111