summaryrefslogtreecommitdiffstats
path: root/image/WebRenderImageProvider.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--image/WebRenderImageProvider.h65
1 files changed, 65 insertions, 0 deletions
diff --git a/image/WebRenderImageProvider.h b/image/WebRenderImageProvider.h
new file mode 100644
index 0000000000..84fee8cb47
--- /dev/null
+++ b/image/WebRenderImageProvider.h
@@ -0,0 +1,65 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef MOZILLA_IMAGE_WEBRENDERIMAGEPROVIDER_H_
+#define MOZILLA_IMAGE_WEBRENDERIMAGEPROVIDER_H_
+
+#include "nsISupportsImpl.h"
+
+namespace mozilla {
+namespace layers {
+class RenderRootStateManager;
+}
+
+namespace wr {
+class IpcResourceUpdateQueue;
+struct ExternalImageId;
+struct ImageKey;
+} // namespace wr
+
+namespace image {
+
+class ImageResource;
+using ImageProviderId = uint32_t;
+
+class WebRenderImageProvider {
+ public:
+ // Subclasses may or may not be XPCOM classes, so we just require that they
+ // implement AddRef and Release.
+ NS_INLINE_DECL_PURE_VIRTUAL_REFCOUNTING
+
+ ImageProviderId GetProviderId() const { return mProviderId; }
+
+ static ImageProviderId AllocateProviderId();
+
+ /**
+ * Generate an ImageKey for the given frame.
+ * @param aSurface The current frame. This should match what was cached via
+ * SetCurrentFrame, but if it does not, it will need to
+ * regenerate the cached ImageKey.
+ */
+ virtual nsresult UpdateKey(layers::RenderRootStateManager* aManager,
+ wr::IpcResourceUpdateQueue& aResources,
+ wr::ImageKey& aKey) {
+ return NS_ERROR_NOT_AVAILABLE;
+ }
+
+ /**
+ * Invalidate if a blob recording, requiring it to be regenerated.
+ */
+ virtual void InvalidateRecording() {}
+
+ protected:
+ WebRenderImageProvider(const ImageResource* aImage);
+
+ private:
+ ImageProviderId mProviderId;
+};
+
+} // namespace image
+} // namespace mozilla
+
+#endif /* MOZILLA_IMAGE_WEBRENDERIMAGEPROVIDER_H_ */