Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(305)

Unified Diff: ppapi/proxy/compositor_layer_resource.cc

Issue 324983005: [PPAPI] Add browser tests for compositor API (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@compositor_api_impl_new
Patch Set: Remove change in base folder. Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ppapi/proxy/compositor_layer_resource.cc
diff --git a/ppapi/proxy/compositor_layer_resource.cc b/ppapi/proxy/compositor_layer_resource.cc
index a33f7c17f2ac7ff631f9ce49342e4fe555edc630..b04f4e66cc2f20d7e1b6b2e730d4ef28780904e0 100644
--- a/ppapi/proxy/compositor_layer_resource.cc
+++ b/ppapi/proxy/compositor_layer_resource.cc
@@ -28,6 +28,7 @@ float clamp(float value) {
}
void OnTextureReleased(
+ const scoped_refptr<CompositorResource> compositor,
const ScopedPPResource& layer,
const ScopedPPResource& context,
uint32_t texture,
@@ -56,6 +57,7 @@ void OnTextureReleased(
}
void OnImageReleased(
+ const scoped_refptr<CompositorResource> compositor,
const ScopedPPResource& layer,
const ScopedPPResource& image,
const scoped_refptr<TrackedCallback>& release_callback,
@@ -71,7 +73,7 @@ void OnImageReleased(
CompositorLayerResource::CompositorLayerResource(
Connection connection,
PP_Instance instance,
- const CompositorResource* compositor)
+ scoped_refptr<CompositorResource> compositor)
: PluginResource(connection, instance),
compositor_(compositor),
source_size_(PP_MakeFloatSize(0.0f, 0.0f)) {
@@ -105,7 +107,6 @@ int32_t CompositorLayerResource::SetColor(float red,
if (!size)
return PP_ERROR_BADARGUMENT;
-
data_.color->red = clamp(red);
data_.color->green = clamp(green);
data_.color->blue = clamp(blue);
@@ -138,8 +139,22 @@ int32_t CompositorLayerResource::SetTexture(
GLES2Implementation* gl = graphics->gles2_impl();
// Generate a Mailbox for the texture.
- gl->GenMailboxCHROMIUM(
- reinterpret_cast<GLbyte*>(data_.texture->mailbox.name));
+ // gl->GenMailboxCHROMIUM(
+ // reinterpret_cast<GLbyte*>(data_.texture->mailbox.name));
+ //
+ // TODO(penghuang): Use gl->GenMailboxCHROMIUM() when the bug in
+ // nacl_secure_random() is fixed.
piman 2014/06/19 20:44:04 I thought that was getting fixed. Let's remove thi
Peng 2014/06/19 22:33:41 Done.
+ static bool flag = false;
+ if (!flag) {
+ srand(time(NULL));
+ flag = true;
+ }
+ uint8_t value = 1;
+ for (size_t i = 1; i < arraysize(data_.texture->mailbox.name); ++i) {
+ data_.texture->mailbox.name[i] = static_cast<uint8_t>(rand());
+ value ^= data_.texture->mailbox.name[i];
+ }
+ data_.texture->mailbox.name[0] = value;
gl->ProduceTextureDirectCHROMIUM(
texture, GL_TEXTURE_2D,
reinterpret_cast<const GLbyte*>(data_.texture->mailbox.name));
@@ -158,9 +173,12 @@ int32_t CompositorLayerResource::SetTexture(
// release_callback will be aborted immediately, but the texture or image
// in this layer may still being used by chromium compositor. So we have to
// use ScopedPPResource to keep this resource alive until the texture or image
- // is released by the chromium compositor.
+ // is released by the chromium compositor. And we need keep the compositor
+ // alive, otherwise we will not receive the release IPC message for the
+ // texture.
piman 2014/06/19 20:44:04 maybe you should let the plugin do that.
Peng 2014/06/19 22:33:41 Done.
release_callback_ = base::Bind(
&OnTextureReleased,
+ compositor_, // Keep compositor alive.
ScopedPPResource(pp_resource()), // Keep layer alive.
ScopedPPResource(context), // Keep context alive
texture,
@@ -207,8 +225,15 @@ int32_t CompositorLayerResource::SetImage(
data_.image->source_rect.point = PP_MakeFloatPoint(0.0f, 0.0f);
data_.image->source_rect.size = source_size_;
+ // If the PP_Resource of this layer is released by the plugin, the
+ // release_callback will be aborted immediately, but the texture or image
+ // in this layer may still being used by chromium compositor. So we have to
+ // use ScopedPPResource to keep this resource alive until the texture or image
+ // is released by the chromium compositor. And we need keep the compositor
+ // alive, otherwise we will not receive the release IPC message for the image.
release_callback_ = base::Bind(
&OnImageReleased,
+ compositor_, // Keep compositor alive.
ScopedPPResource(pp_resource()), // Keep layer alive.
ScopedPPResource(image_data), // Keep image_data alive.
release_callback);
@@ -333,7 +358,7 @@ bool CompositorLayerResource::SetType(LayerType type) {
int32_t CompositorLayerResource::CheckForSetTextureAndImage(
LayerType type,
const scoped_refptr<TrackedCallback>& release_callback) {
- if (!compositor_)
+ if (!compositor_)
return PP_ERROR_BADRESOURCE;
if (compositor_->IsInProgress())

Powered by Google App Engine
This is Rietveld 408576698