| Index: third_party/WebKit/Source/platform/graphics/gpu/SharedContextRateLimiter.cpp
|
| diff --git a/third_party/WebKit/Source/platform/graphics/gpu/SharedContextRateLimiter.cpp b/third_party/WebKit/Source/platform/graphics/gpu/SharedContextRateLimiter.cpp
|
| index 0d5868f4712682c0727f11371ac8646ab26f7e66..3a994b1ec4a74ab0fefda07341261e996270af74 100644
|
| --- a/third_party/WebKit/Source/platform/graphics/gpu/SharedContextRateLimiter.cpp
|
| +++ b/third_party/WebKit/Source/platform/graphics/gpu/SharedContextRateLimiter.cpp
|
| @@ -22,39 +22,53 @@ PassOwnPtr<SharedContextRateLimiter> SharedContextRateLimiter::create(unsigned m
|
|
|
| SharedContextRateLimiter::SharedContextRateLimiter(unsigned maxPendingTicks)
|
| : m_maxPendingTicks(maxPendingTicks)
|
| + , m_canUseSyncQueries(false)
|
| {
|
| m_contextProvider = adoptPtr(Platform::current()->createSharedOffscreenGraphicsContext3DProvider());
|
| + if (!m_contextProvider)
|
| + return;
|
| +
|
| WebGraphicsContext3D* context = m_contextProvider->context3d();
|
| - OwnPtr<Extensions3DUtil> extensionsUtil = Extensions3DUtil::create(context);
|
| - // TODO(junov): when the GLES 3.0 command buffer is ready, we could use fenceSync instead
|
| - m_canUseSyncQueries = extensionsUtil->supportsExtension("GL_CHROMIUM_sync_query");
|
| + if (context && !context->isContextLost()) {
|
| + OwnPtr<Extensions3DUtil> extensionsUtil = Extensions3DUtil::create(context);
|
| + // TODO(junov): when the GLES 3.0 command buffer is ready, we could use fenceSync instead
|
| + m_canUseSyncQueries = extensionsUtil->supportsExtension("GL_CHROMIUM_sync_query");
|
| + }
|
| }
|
|
|
| void SharedContextRateLimiter::tick()
|
| {
|
| + if (!m_contextProvider)
|
| + return;
|
| +
|
| WebGraphicsContext3D* context = m_contextProvider->context3d();
|
| - if (context && !context->isContextLost()) {
|
| - m_queries.append(m_canUseSyncQueries ? context->createQueryEXT() : 0);
|
| +
|
| + if (!context || context->isContextLost())
|
| + return;
|
| +
|
| + m_queries.append(m_canUseSyncQueries ? context->createQueryEXT() : 0);
|
| + if (m_canUseSyncQueries) {
|
| + context->beginQueryEXT(GL_COMMANDS_COMPLETED_CHROMIUM, m_queries.last());
|
| + context->endQueryEXT(GL_COMMANDS_COMPLETED_CHROMIUM);
|
| + }
|
| + if (m_queries.size() > m_maxPendingTicks) {
|
| if (m_canUseSyncQueries) {
|
| - context->beginQueryEXT(GL_COMMANDS_COMPLETED_CHROMIUM, m_queries.last());
|
| - context->endQueryEXT(GL_COMMANDS_COMPLETED_CHROMIUM);
|
| - }
|
| - if (m_queries.size() > m_maxPendingTicks) {
|
| - if (m_canUseSyncQueries) {
|
| - WGC3Duint result;
|
| - context->getQueryObjectuivEXT(m_queries.first(), GL_QUERY_RESULT_EXT, &result);
|
| - context->deleteQueryEXT(m_queries.first());
|
| - m_queries.removeFirst();
|
| - } else {
|
| - context->finish();
|
| - reset();
|
| - }
|
| + WGC3Duint result;
|
| + context->getQueryObjectuivEXT(m_queries.first(), GL_QUERY_RESULT_EXT, &result);
|
| + context->deleteQueryEXT(m_queries.first());
|
| + m_queries.removeFirst();
|
| + } else {
|
| + context->finish();
|
| + reset();
|
| }
|
| }
|
| }
|
|
|
| void SharedContextRateLimiter::reset()
|
| {
|
| + if (!m_contextProvider)
|
| + return;
|
| +
|
| WebGraphicsContext3D* context = m_contextProvider->context3d();
|
| if (context && !context->isContextLost()) {
|
| while (m_queries.size() > 0) {
|
|
|