summaryrefslogtreecommitdiffstats
path: root/cc/ThrottledTextureUploader.cpp
diff options
context:
space:
mode:
authorjamesr@chromium.org <jamesr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-25 00:09:14 +0000
committerjamesr@chromium.org <jamesr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-25 00:09:14 +0000
commit94f206c1c75eb8cc4df2225a1c5c9c7b6fc96679 (patch)
tree530f51d5c75459999e4adf2a6895884ce1c15ce0 /cc/ThrottledTextureUploader.cpp
parent56235947f2b023fc63cfad692c56df4e92199848 (diff)
downloadchromium_src-94f206c1c75eb8cc4df2225a1c5c9c7b6fc96679.zip
chromium_src-94f206c1c75eb8cc4df2225a1c5c9c7b6fc96679.tar.gz
chromium_src-94f206c1c75eb8cc4df2225a1c5c9c7b6fc96679.tar.bz2
Here are gyp targets and stubs for compiling libcc and the webkit_compositor bindings in chromium. Everything is guarded behind the off-by-default use_libcc_for_compositor gyp variable. I haven't included the actual code here, but there are scripts to sync. I plan to land + manually sync the code into place until we're ready to flip the gyp switch.
Snapshot from r126652 BUG= Review URL: https://chromiumcodereview.appspot.com/10828381 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@153354 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/ThrottledTextureUploader.cpp')
-rw-r--r--cc/ThrottledTextureUploader.cpp118
1 files changed, 118 insertions, 0 deletions
diff --git a/cc/ThrottledTextureUploader.cpp b/cc/ThrottledTextureUploader.cpp
new file mode 100644
index 0000000..594342e
--- /dev/null
+++ b/cc/ThrottledTextureUploader.cpp
@@ -0,0 +1,118 @@
+// Copyright 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.
+
+#include "config.h"
+
+#include "ThrottledTextureUploader.h"
+
+#include "Extensions3DChromium.h"
+#include <public/WebGraphicsContext3D.h>
+
+namespace {
+
+// Number of pending texture update queries to allow.
+static const size_t maxPendingQueries = 2;
+
+} // anonymous namespace
+
+namespace WebCore {
+
+ThrottledTextureUploader::Query::Query(WebKit::WebGraphicsContext3D* context)
+ : m_context(context)
+ , m_queryId(0)
+{
+ m_queryId = m_context->createQueryEXT();
+}
+
+ThrottledTextureUploader::Query::~Query()
+{
+ m_context->deleteQueryEXT(m_queryId);
+}
+
+void ThrottledTextureUploader::Query::begin()
+{
+ m_context->beginQueryEXT(Extensions3DChromium::COMMANDS_ISSUED_CHROMIUM, m_queryId);
+}
+
+void ThrottledTextureUploader::Query::end()
+{
+ m_context->endQueryEXT(Extensions3DChromium::COMMANDS_ISSUED_CHROMIUM);
+}
+
+bool ThrottledTextureUploader::Query::isPending()
+{
+ unsigned available = 1;
+ m_context->getQueryObjectuivEXT(m_queryId, Extensions3DChromium::QUERY_RESULT_AVAILABLE_EXT, &available);
+ return !available;
+}
+
+void ThrottledTextureUploader::Query::wait()
+{
+ unsigned result;
+ m_context->getQueryObjectuivEXT(m_queryId, Extensions3DChromium::QUERY_RESULT_EXT, &result);
+}
+
+ThrottledTextureUploader::ThrottledTextureUploader(WebKit::WebGraphicsContext3D* context)
+ : m_context(context)
+ , m_maxPendingQueries(maxPendingQueries)
+{
+}
+
+ThrottledTextureUploader::ThrottledTextureUploader(WebKit::WebGraphicsContext3D* context, size_t pendingUploadLimit)
+ : m_context(context)
+ , m_maxPendingQueries(pendingUploadLimit)
+{
+ ASSERT(m_context);
+}
+
+ThrottledTextureUploader::~ThrottledTextureUploader()
+{
+}
+
+bool ThrottledTextureUploader::isBusy()
+{
+ processQueries();
+
+ if (!m_availableQueries.isEmpty())
+ return false;
+
+ if (m_pendingQueries.size() == m_maxPendingQueries)
+ return true;
+
+ m_availableQueries.append(Query::create(m_context));
+ return false;
+}
+
+void ThrottledTextureUploader::beginUploads()
+{
+ // Wait for query to become available.
+ while (isBusy())
+ m_pendingQueries.first()->wait();
+
+ ASSERT(!m_availableQueries.isEmpty());
+ m_availableQueries.first()->begin();
+}
+
+void ThrottledTextureUploader::endUploads()
+{
+ m_availableQueries.first()->end();
+ m_pendingQueries.append(m_availableQueries.takeFirst());
+}
+
+void ThrottledTextureUploader::uploadTexture(CCResourceProvider* resourceProvider, Parameters upload)
+{
+ upload.texture->updateRect(resourceProvider, upload.sourceRect, upload.destOffset);
+}
+
+void ThrottledTextureUploader::processQueries()
+{
+ while (!m_pendingQueries.isEmpty()) {
+ if (m_pendingQueries.first()->isPending())
+ break;
+
+ m_availableQueries.append(m_pendingQueries.takeFirst());
+ }
+}
+
+}