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