diff options
author | jamesr@chromium.org <jamesr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-25 00:09:14 +0000 |
---|---|---|
committer | jamesr@chromium.org <jamesr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-25 00:09:14 +0000 |
commit | 94f206c1c75eb8cc4df2225a1c5c9c7b6fc96679 (patch) | |
tree | 530f51d5c75459999e4adf2a6895884ce1c15ce0 /cc/ThrottledTextureUploader.cpp | |
parent | 56235947f2b023fc63cfad692c56df4e92199848 (diff) | |
download | chromium_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.cpp | 118 |
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()); + } +} + +} |