viewport_surface.h revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
1// Copyright 2014 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#ifndef MOJO_SERVICES_NATIVE_VIEWPORT_VIEWPORT_SURFACE_H_
6#define MOJO_SERVICES_NATIVE_VIEWPORT_VIEWPORT_SURFACE_H_
7
8#include "base/memory/scoped_ptr.h"
9#include "base/memory/weak_ptr.h"
10#include "cc/surfaces/surface_id.h"
11#include "mojo/services/public/interfaces/gpu/gpu.mojom.h"
12#include "mojo/services/public/interfaces/surfaces/surfaces.mojom.h"
13#include "mojo/services/public/interfaces/surfaces/surfaces_service.mojom.h"
14#include "ui/gfx/native_widget_types.h"
15#include "ui/gfx/size.h"
16
17namespace cc {
18class SurfaceIdAllocator;
19}
20
21namespace mojo {
22
23// This manages the surface that draws to a particular NativeViewport instance.
24class ViewportSurface : public SurfaceClient {
25 public:
26  ViewportSurface(SurfacesService* surfaces_service,
27                  Gpu* gpu_service,
28                  const gfx::Size& size,
29                  cc::SurfaceId child_id);
30  virtual ~ViewportSurface();
31
32  void SetWidgetId(uint64_t widget_id);
33  void SetSize(const gfx::Size& size);
34  void SetChildId(cc::SurfaceId child_id);
35
36 private:
37  void OnSurfaceConnectionCreated(SurfacePtr surface, uint32_t id_namespace);
38  void BindSurfaceToNativeViewport();
39  void SubmitFrame();
40
41  // SurfaceClient implementation.
42  virtual void ReturnResources(Array<ReturnedResourcePtr> resources) OVERRIDE;
43
44  SurfacePtr surface_;
45  Gpu* gpu_service_;
46  uint64_t widget_id_;
47  gfx::Size size_;
48  scoped_ptr<cc::SurfaceIdAllocator> id_allocator_;
49  cc::SurfaceId id_;
50  cc::SurfaceId child_id_;
51  base::WeakPtrFactory<ViewportSurface> weak_factory_;
52
53  DISALLOW_COPY_AND_ASSIGN(ViewportSurface);
54};
55
56}  // namespace mojo
57
58#endif  // MOJO_SERVICES_NATIVE_VIEWPORT_VIEWPORT_SURFACE_H_
59