Index: cc/ipc/copy_output_result_struct_traits.cc |
diff --git a/cc/ipc/copy_output_result_struct_traits.cc b/cc/ipc/copy_output_result_struct_traits.cc |
index 0398fe115cd52463b56fbf2a1a1540d3d96b2935..851f9480b83b5be663bac99668861c4abc22ebae 100644 |
--- a/cc/ipc/copy_output_result_struct_traits.cc |
+++ b/cc/ipc/copy_output_result_struct_traits.cc |
@@ -4,9 +4,76 @@ |
#include "cc/ipc/copy_output_result_struct_traits.h" |
+#include "mojo/public/cpp/bindings/strong_binding.h" |
+ |
+namespace { |
+ |
+class TextureMailboxReleaserImpl : public cc::mojom::TextureMailboxReleaser { |
+ public: |
+ TextureMailboxReleaserImpl( |
+ std::unique_ptr<cc::SingleReleaseCallback> release_callback) |
+ : release_callback_(std::move(release_callback)) {} |
+ |
+ // mojom::TextureMailboxReleaser implementation: |
+ void Release(const gpu::SyncToken& sync_token, bool is_lost) override { |
+ release_callback_->Run(sync_token, is_lost); |
+ } |
+ |
+ private: |
+ std::unique_ptr<cc::SingleReleaseCallback> release_callback_; |
+}; |
+ |
+void Release(cc::mojom::TextureMailboxReleaserPtr ptr, |
+ const gpu::SyncToken& sync_token, |
+ bool is_lost) { |
+ ptr->Release(sync_token, is_lost); |
+} |
+ |
+} // namespace |
+ |
namespace mojo { |
// static |
+const SkBitmap& StructTraits<cc::mojom::CopyOutputResultDataView, |
+ std::unique_ptr<cc::CopyOutputResult>>:: |
+ bitmap(const std::unique_ptr<cc::CopyOutputResult>& result) { |
+ static SkBitmap* null_bitmap = new SkBitmap(); |
+ if (!result->bitmap_) |
+ return *null_bitmap; |
+ return *result->bitmap_; |
+} |
+ |
+// static |
+cc::TextureMailboxWithRelease |
+StructTraits<cc::mojom::CopyOutputResultDataView, |
+ std::unique_ptr<cc::CopyOutputResult>>:: |
+ texture_mailbox(const std::unique_ptr<cc::CopyOutputResult>& result) { |
+ cc::mojom::TextureMailboxReleaserPtr releaser; |
+ if (result->release_callback_) { |
+ auto impl = base::MakeUnique<TextureMailboxReleaserImpl>( |
+ std::move(result->release_callback_)); |
+ MakeStrongBinding(std::move(impl), MakeRequest(&releaser)); |
+ } |
+ return cc::TextureMailboxWithRelease{result->texture_mailbox_, releaser}; |
+} |
+ |
+/* |
danakj
2017/02/13 18:41:04
this would be deleted
|
+// static |
+cc::mojom::TextureMailboxReleaserPtr |
+StructTraits<cc::mojom::CopyOutputResultDataView, |
+ std::unique_ptr<cc::CopyOutputResult>>:: |
+ releaser(const std::unique_ptr<cc::CopyOutputResult>& result) { |
+ if (!result->release_callback_) |
+ return {}; |
+ cc::mojom::TextureMailboxReleaserPtr releaser; |
+ auto impl = base::MakeUnique<TextureMailboxReleaserImpl>( |
+ std::move(result->release_callback_)); |
+ MakeStrongBinding(std::move(impl), MakeRequest(&releaser)); |
+ return releaser; |
+} |
+*/ |
+ |
+// static |
bool StructTraits<cc::mojom::CopyOutputResultDataView, |
std::unique_ptr<cc::CopyOutputResult>>:: |
Read(cc::mojom::CopyOutputResultDataView data, |
@@ -23,19 +90,24 @@ bool StructTraits<cc::mojom::CopyOutputResultDataView, |
if (!data.ReadTextureMailbox(&result->texture_mailbox_)) |
return false; |
+ auto releaser = data.TakeReleaser<cc::mojom::TextureMailboxReleaserPtr>(); |
danakj
2017/02/13 18:41:05
This won't work right? It should be using the Read
|
+ if (releaser) { |
+ result->release_callback_ = cc::SingleReleaseCallback::Create( |
+ base::Bind(Release, base::Passed(&releaser))); |
+ } |
+ |
*out_p = std::move(result); |
return true; |
} |
// static |
-const SkBitmap& StructTraits<cc::mojom::CopyOutputResultDataView, |
- std::unique_ptr<cc::CopyOutputResult>>:: |
- bitmap(const std::unique_ptr<cc::CopyOutputResult>& result) { |
- static SkBitmap* null_bitmap = new SkBitmap(); |
- if (!result->bitmap_) |
- return *null_bitmap; |
- return *result->bitmap_; |
+bool StructTraits<cc::mojom::TextureMailboxWithReleaseDataView, |
+ std::unique_ptr<cc::TextureMailboxWithRelease>>:: |
+ Read(cc::mojom::TextureMailboxWithReleaseDataView data, |
+ cc::TextureMailboxWithRelease* out_p) { |
+ *out_p = data.TakeReleaser<cc::mojom::TextureMailboxReleaserPtr>(); |
+ return *data.ReadTextureMailbox(&out.texture_mailbox); |
} |
} // namespace mojo |