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

Unified Diff: cc/texture_layer_impl.cc

Issue 11638028: Mailbox support for texture layers. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years 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
« cc/texture_layer.h ('K') | « cc/texture_layer_impl.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/texture_layer_impl.cc
diff --git a/cc/texture_layer_impl.cc b/cc/texture_layer_impl.cc
index 433ce34256e7260b5bdf10b9c573d56420e729d2..c22b7a35d024a6ddf9d4e49a7a1deda5a348ee97 100644
--- a/cc/texture_layer_impl.cc
+++ b/cc/texture_layer_impl.cc
@@ -5,19 +5,25 @@
#include "cc/texture_layer_impl.h"
#include "base/stringprintf.h"
+#include "cc/layer_tree_impl.h"
+#include "cc/mailbox_release_client.h"
#include "cc/quad_sink.h"
#include "cc/renderer.h"
#include "cc/texture_draw_quad.h"
+#include <public/WebGraphicsContext3D.h>
danakj 2012/12/20 02:16:19 use "third_party/WebKit/..."
alexst (slow to review) 2012/12/21 14:15:21 Goes away with base::bind On 2012/12/20 02:16:19,
+
namespace cc {
-TextureLayerImpl::TextureLayerImpl(LayerTreeImpl* treeImpl, int id)
+TextureLayerImpl::TextureLayerImpl(LayerTreeImpl* treeImpl, int id, MailboxReleaseClient* client)
: LayerImpl(treeImpl, id)
, m_textureId(0)
, m_externalTextureResource(0)
, m_premultipliedAlpha(true)
, m_flipped(true)
, m_uvRect(0, 0, 1, 1)
+ , m_newMailboxPending(false)
+ , m_mailboxClient(client)
{
m_vertexOpacity[0] = 1.0f;
m_vertexOpacity[1] = 1.0f;
@@ -29,8 +35,21 @@ TextureLayerImpl::~TextureLayerImpl()
{
piman 2012/12/20 02:14:21 You probably need to do more here, for the case wh
alexst (slow to review) 2012/12/21 14:15:21 Done.
}
+void TextureLayerImpl::setTextureMailbox(const std::string& mailboxName)
+{
+ // Same mailbox name was commited, nothing to do
+ if (m_lastMailbox.compare(mailboxName) == 0)
+ return;
+ m_newMailbox = mailboxName;
+ m_newMailboxPending = true;
+}
+
void TextureLayerImpl::willDraw(ResourceProvider* resourceProvider)
{
+ if (m_mailboxClient) {
+ handleMailboxResources(resourceProvider);
+ return;
+ }
if (!m_textureId)
return;
DCHECK(!m_externalTextureResource);
@@ -59,6 +78,8 @@ void TextureLayerImpl::appendQuads(QuadSink& quadSink, AppendQuadsData& appendQu
void TextureLayerImpl::didDraw(ResourceProvider* resourceProvider)
{
+ if (m_mailboxClient)
+ return;
if (!m_externalTextureResource)
return;
// FIXME: the following assert will not be true when sending resources to a
@@ -94,4 +115,26 @@ const char* TextureLayerImpl::layerTypeAsString() const
return "TextureLayer";
}
+void TextureLayerImpl::handleMailboxResources(ResourceProvider* resourceProvider)
+{
+ if (!m_newMailboxPending)
+ return;
+
+ if (m_externalTextureResource) {
+ DCHECK(!resourceProvider->inUseByConsumer(m_externalTextureResource));
+ resourceProvider->deleteResource(m_externalTextureResource);
+ m_externalTextureResource = 0;
+ WebKit::WebGraphicsContext3D* context =
+ layerTreeImpl()->resource_provider()->graphicsContext3D();
+
+ m_mailboxClient->mailboxReleased(m_lastMailbox, context->insertSyncPoint());
piman 2012/12/20 02:14:21 We need to be clear about which thread the client
alexst (slow to review) 2012/12/21 14:15:21 That's one of the things I wanted to discuss. Lik
+ }
+ if (m_newMailbox.size()) {
+ m_externalTextureResource = resourceProvider->createResourceFromTextureMailbox(m_newMailbox);
+ m_newMailboxPending = false;
+ }
+ m_lastMailbox = m_newMailbox;
+ m_newMailbox.clear();
+}
+
} // namespace cc
« cc/texture_layer.h ('K') | « cc/texture_layer_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698