summaryrefslogtreecommitdiffstats
path: root/content/browser/aura/image_transport_factory.h
diff options
context:
space:
mode:
Diffstat (limited to 'content/browser/aura/image_transport_factory.h')
-rw-r--r--content/browser/aura/image_transport_factory.h94
1 files changed, 94 insertions, 0 deletions
diff --git a/content/browser/aura/image_transport_factory.h b/content/browser/aura/image_transport_factory.h
new file mode 100644
index 0000000..b2c807f
--- /dev/null
+++ b/content/browser/aura/image_transport_factory.h
@@ -0,0 +1,94 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_AURA_IMAGE_TRANSPORT_FACTORY_H_
+#define CONTENT_BROWSER_AURA_IMAGE_TRANSPORT_FACTORY_H_
+
+#include <string>
+
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_ptr.h"
+#include "content/common/content_export.h"
+#include "ui/gfx/native_widget_types.h"
+
+namespace gfx {
+class Size;
+}
+
+namespace ui {
+class ContextFactory;
+class Texture;
+}
+
+namespace blink {
+class WebGraphicsContext3D;
+}
+
+namespace content {
+class GLHelper;
+
+// This class provides a way to get notified when surface handles get lost.
+class CONTENT_EXPORT ImageTransportFactoryObserver {
+ public:
+ virtual ~ImageTransportFactoryObserver() {}
+
+ // Notifies that the surface handles generated by ImageTransportFactory were
+ // lost.
+ // When this is called, the old resources (e.g. shared context, GL helper)
+ // still exist, but are about to be destroyed. Getting a reference to those
+ // resources from the ImageTransportFactory (e.g. through GetGLHelper) will
+ // return newly recreated, valid resources.
+ virtual void OnLostResources() = 0;
+};
+
+// This class provides the interface for creating the support for the
+// cross-process image transport, both for creating the shared surface handle
+// (destination surface for the GPU process) and the transport client (logic for
+// using that surface as a texture). The factory is a process-wide singleton.
+class CONTENT_EXPORT ImageTransportFactory {
+ public:
+ virtual ~ImageTransportFactory() {}
+
+ // Initializes the global transport factory.
+ static void Initialize();
+
+ // Initializes the global transport factory for unit tests using the provided
+ // context factory.
+ static void InitializeForUnitTests(
+ scoped_ptr<ui::ContextFactory> test_factory);
+
+ // Terminates the global transport factory.
+ static void Terminate();
+
+ // Gets the factory instance.
+ static ImageTransportFactory* GetInstance();
+
+ // Gets the image transport factory as a context factory for the compositor.
+ virtual ui::ContextFactory* AsContextFactory() = 0;
+
+ virtual gfx::GLSurfaceHandle GetSharedSurfaceHandle() = 0;
+
+ // Creates a transport texture for a given scale factor.
+ virtual scoped_refptr<ui::Texture> CreateTransportClient(
+ float device_scale_factor) = 0;
+
+ // Variant of CreateTransportClient() that deletes the texture on the GPU when
+ // the returned value is deleted.
+ virtual scoped_refptr<ui::Texture> CreateOwnedTexture(
+ const gfx::Size& size,
+ float device_scale_factor,
+ unsigned int texture_id) = 0;
+
+ // Gets a GLHelper instance, associated with the shared context. This
+ // GLHelper will get destroyed whenever the shared context is lost
+ // (ImageTransportFactoryObserver::OnLostResources is called).
+ virtual GLHelper* GetGLHelper() = 0;
+
+ virtual void AddObserver(ImageTransportFactoryObserver* observer) = 0;
+ virtual void RemoveObserver(ImageTransportFactoryObserver* observer) = 0;
+};
+
+} // namespace content
+
+#endif // CONTENT_BROWSER_AURA_IMAGE_TRANSPORT_FACTORY_H_