1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file. 4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ui/compositor/test/test_compositor_host.h" 6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/basictypes.h" 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/bind.h" 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/compiler_specific.h" 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/logging.h" 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/memory/scoped_ptr.h" 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/memory/weak_ptr.h" 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/thread_task_runner_handle.h" 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ui/compositor/compositor.h" 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ui/gfx/rect.h" 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace ui { 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)class TestCompositorHostOzone : public TestCompositorHost { 20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public: 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TestCompositorHostOzone(const gfx::Rect& bounds, 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ui::ContextFactory* context_factory); 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual ~TestCompositorHostOzone(); 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private: 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Overridden from TestCompositorHost: 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void Show() OVERRIDE; 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual ui::Compositor* GetCompositor() OVERRIDE; 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void Draw(); 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch gfx::Rect bounds_; 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ui::ContextFactory* context_factory_; 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<ui::Compositor> compositor_; 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DISALLOW_COPY_AND_ASSIGN(TestCompositorHostOzone); 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}; 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TestCompositorHostOzone::TestCompositorHostOzone( 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const gfx::Rect& bounds, 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ui::ContextFactory* context_factory) 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : bounds_(bounds), 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) context_factory_(context_factory) {} 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTestCompositorHostOzone::~TestCompositorHostOzone() {} 48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid TestCompositorHostOzone::Show() { 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Ozone should rightly have a backing native framebuffer 51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // An in-memory array draw into by OSMesa is a reasonble 52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // fascimile of a dumb framebuffer at present. 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // GLSurface will allocate the array so long as it is provided 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // with a non-0 widget. 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // TODO(rjkroege): Use a "real" ozone widget when it is 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // available: http://crbug.com/255128 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) compositor_.reset(new ui::Compositor(1, 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) context_factory_, 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ThreadTaskRunnerHandle::Get())); 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch compositor_->SetScaleAndSize(1.0f, bounds_.size()); 61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochui::Compositor* TestCompositorHostOzone::GetCompositor() { 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return compositor_.get(); 65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid TestCompositorHostOzone::Draw() { 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (compositor_.get()) 69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch compositor_->Draw(); 70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// static 73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TestCompositorHost* TestCompositorHost::Create( 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const gfx::Rect& bounds, 75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ui::ContextFactory* context_factory) { 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return new TestCompositorHostOzone(bounds, context_factory); 77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace ui 80