test_compositor_host_ozone.cc revision 5f1c94371a64b3196d4be9466099bb892df9b88e
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 "ui/compositor/test/test_compositor_host.h"
6
7#include "base/basictypes.h"
8#include "base/bind.h"
9#include "base/compiler_specific.h"
10#include "base/logging.h"
11#include "base/memory/scoped_ptr.h"
12#include "base/memory/weak_ptr.h"
13#include "base/message_loop/message_loop.h"
14#include "ui/compositor/compositor.h"
15#include "ui/gfx/rect.h"
16
17namespace ui {
18
19class TestCompositorHostOzone : public TestCompositorHost {
20 public:
21  TestCompositorHostOzone(const gfx::Rect& bounds,
22                          ui::ContextFactory* context_factory);
23  virtual ~TestCompositorHostOzone();
24
25 private:
26  // Overridden from TestCompositorHost:
27  virtual void Show() OVERRIDE;
28  virtual ui::Compositor* GetCompositor() OVERRIDE;
29
30  void Draw();
31
32  gfx::Rect bounds_;
33
34  ui::ContextFactory* context_factory_;
35
36  scoped_ptr<ui::Compositor> compositor_;
37
38  DISALLOW_COPY_AND_ASSIGN(TestCompositorHostOzone);
39};
40
41TestCompositorHostOzone::TestCompositorHostOzone(
42    const gfx::Rect& bounds,
43    ui::ContextFactory* context_factory)
44    : bounds_(bounds),
45      context_factory_(context_factory) {}
46
47TestCompositorHostOzone::~TestCompositorHostOzone() {}
48
49void TestCompositorHostOzone::Show() {
50  // Ozone should rightly have a backing native framebuffer
51  // An in-memory array draw into by OSMesa is a reasonble
52  // fascimile of a dumb framebuffer at present.
53  // GLSurface will allocate the array so long as it is provided
54  // with a non-0 widget.
55  // TODO(rjkroege): Use a "real" ozone widget when it is
56  // available: http://crbug.com/255128
57  compositor_.reset(new ui::Compositor(1,
58                                       context_factory_,
59                                       base::MessageLoopProxy::current()));
60  compositor_->SetScaleAndSize(1.0f, bounds_.size());
61}
62
63ui::Compositor* TestCompositorHostOzone::GetCompositor() {
64  return compositor_.get();
65}
66
67void TestCompositorHostOzone::Draw() {
68  if (compositor_.get())
69    compositor_->Draw();
70}
71
72// static
73TestCompositorHost* TestCompositorHost::Create(
74    const gfx::Rect& bounds,
75    ui::ContextFactory* context_factory) {
76  return new TestCompositorHostOzone(bounds, context_factory);
77}
78
79}  // namespace ui
80