зеркало из https://github.com/mozilla/pjs.git
Bug 626962. Implement empty transactions for GL. r=bas,a=blocking
This commit is contained in:
Родитель
ad50625152
Коммит
7ac602a836
|
@ -301,10 +301,8 @@ public:
|
|||
* returns false, and the caller must proceed with a normal layer tree
|
||||
* update and EndTransaction.
|
||||
*/
|
||||
virtual bool EndEmptyTransaction()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
virtual bool EndEmptyTransaction() = 0;
|
||||
|
||||
/**
|
||||
* Function called to draw the contents of each ThebesLayer.
|
||||
* aRegionToDraw contains the region that needs to be drawn.
|
||||
|
|
|
@ -392,6 +392,16 @@ LayerManagerOGL::BeginTransactionWithTarget(gfxContext *aTarget)
|
|||
mTarget = aTarget;
|
||||
}
|
||||
|
||||
bool
|
||||
LayerManagerOGL::EndEmptyTransaction()
|
||||
{
|
||||
if (!mRoot)
|
||||
return false;
|
||||
|
||||
EndTransaction(nsnull, nsnull);
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
LayerManagerOGL::EndTransaction(DrawThebesLayerCallback aCallback,
|
||||
void* aCallbackData)
|
||||
|
@ -413,10 +423,7 @@ LayerManagerOGL::EndTransaction(DrawThebesLayerCallback aCallback,
|
|||
mThebesLayerCallback = aCallback;
|
||||
mThebesLayerCallbackData = aCallbackData;
|
||||
|
||||
// NULL callback means "non-painting transaction"
|
||||
if (aCallback) {
|
||||
Render();
|
||||
}
|
||||
Render();
|
||||
|
||||
mThebesLayerCallback = nsnull;
|
||||
mThebesLayerCallbackData = nsnull;
|
||||
|
|
|
@ -136,6 +136,7 @@ public:
|
|||
|
||||
void EndConstruction();
|
||||
|
||||
virtual bool EndEmptyTransaction();
|
||||
virtual void EndTransaction(DrawThebesLayerCallback aCallback,
|
||||
void* aCallbackData);
|
||||
|
||||
|
|
|
@ -693,14 +693,18 @@ ThebesLayerOGL::RenderLayer(int aPreviousFrameBuffer,
|
|||
|
||||
LayerManager::DrawThebesLayerCallback callback =
|
||||
mOGLManager->GetThebesLayerCallback();
|
||||
void* callbackData = mOGLManager->GetThebesLayerCallbackData();
|
||||
callback(this, state.mContext, state.mRegionToDraw,
|
||||
state.mRegionToInvalidate, callbackData);
|
||||
// Everything that's visible has been validated. Do this instead of
|
||||
// OR-ing with aRegionToDraw, since that can lead to a very complex region
|
||||
// here (OR doesn't automatically simplify to the simplest possible
|
||||
// representation of a region.)
|
||||
mValidRegion.Or(mValidRegion, mVisibleRegion);
|
||||
if (!callback) {
|
||||
NS_ERROR("GL should never need to update ThebesLayers in an empty transaction");
|
||||
} else {
|
||||
void* callbackData = mOGLManager->GetThebesLayerCallbackData();
|
||||
callback(this, state.mContext, state.mRegionToDraw,
|
||||
state.mRegionToInvalidate, callbackData);
|
||||
// Everything that's visible has been validated. Do this instead of
|
||||
// OR-ing with aRegionToDraw, since that can lead to a very complex region
|
||||
// here (OR doesn't automatically simplify to the simplest possible
|
||||
// representation of a region.)
|
||||
mValidRegion.Or(mValidRegion, mVisibleRegion);
|
||||
}
|
||||
}
|
||||
|
||||
DEBUG_GL_ERROR_CHECK(gl());
|
||||
|
|
Загрузка…
Ссылка в новой задаче