15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "mojo/examples/compositor_app/compositor_host.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "cc/layers/layer.h" 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "cc/layers/solid_color_layer.h" 903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "cc/output/begin_frame_args.h" 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "cc/output/context_provider.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "cc/output/output_surface.h" 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "cc/trees/layer_tree_host.h" 13010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "mojo/cc/context_provider_mojo.h" 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace mojo { 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace examples { 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)CompositorHost::CompositorHost(ScopedMessagePipeHandle command_buffer_handle) 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : command_buffer_handle_(command_buffer_handle.Pass()), 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) compositor_thread_("compositor") { 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK(command_buffer_handle_.is_valid()); 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool started = compositor_thread_.Start(); 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(started); 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cc::LayerTreeSettings settings; 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tree_ = cc::LayerTreeHost::CreateThreaded( 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) this, 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) NULL, 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) settings, 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::MessageLoopProxy::current(), 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) compositor_thread_.message_loop_proxy()); 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SetupScene(); 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)CompositorHost::~CompositorHost() {} 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void CompositorHost::SetSize(const gfx::Size& viewport_size) { 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tree_->SetViewportSize(viewport_size); 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tree_->SetLayerTreeHostClientReady(); 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void CompositorHost::SetupScene() { 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_refptr<cc::Layer> root_layer = cc::SolidColorLayer::Create(); 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) root_layer->SetBounds(gfx::Size(500, 500)); 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) root_layer->SetBackgroundColor(SK_ColorBLUE); 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) root_layer->SetIsDrawable(true); 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tree_->SetRootLayer(root_layer); 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) child_layer_ = cc::SolidColorLayer::Create(); 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) child_layer_->SetBounds(gfx::Size(100, 100)); 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) child_layer_->SetBackgroundColor(SK_ColorGREEN); 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) child_layer_->SetIsDrawable(true); 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::Transform child_transform; 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) child_transform.Translate(200, 200); 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) child_layer_->SetTransform(child_transform); 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) root_layer->AddChild(child_layer_); 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void CompositorHost::WillBeginMainFrame(int frame_id) {} 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void CompositorHost::DidBeginMainFrame() {} 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 6203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void CompositorHost::BeginMainFrame(const cc::BeginFrameArgs& args) { 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // TODO(jamesr): Should use cc's animation system. 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static const double kDegreesPerSecond = 70.0; 6503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) double time_in_seconds = (args.frame_time - base::TimeTicks()).InSecondsF(); 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) double child_rotation_degrees = kDegreesPerSecond * time_in_seconds; 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gfx::Transform child_transform; 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) child_transform.Translate(200, 200); 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) child_transform.Rotate(child_rotation_degrees); 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) child_layer_->SetTransform(child_transform); 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) tree_->SetNeedsAnimate(); 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void CompositorHost::Layout() {} 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid CompositorHost::ApplyViewportDeltas(const gfx::Vector2d& scroll_delta, 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci float page_scale, 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci float top_controls_delta) {} 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid CompositorHost::RequestNewOutputSurface(bool fallback) { 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci tree_->SetOutputSurface(make_scoped_ptr(new cc::OutputSurface( 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new ContextProviderMojo(command_buffer_handle_.Pass())))); 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid CompositorHost::DidInitializeOutputSurface() { 855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void CompositorHost::WillCommit() {} 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void CompositorHost::DidCommit() {} 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void CompositorHost::DidCommitAndDrawFrame() {} 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void CompositorHost::DidCompleteSwapBuffers() {} 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace examples 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace mojo 94