зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1804924 - Don't use DrawTargetWebgl when willReadFrequently is set. r=jgilbert,jrmuizel
Differential Revision: https://phabricator.services.mozilla.com/D164362
This commit is contained in:
Родитель
4411fc0df9
Коммит
94b04b1067
|
@ -1348,7 +1348,13 @@ void CanvasRenderingContext2D::RestoreClipsAndTransformToTarget() {
|
||||||
|
|
||||||
bool CanvasRenderingContext2D::BorrowTarget(const IntRect& aPersistedRect,
|
bool CanvasRenderingContext2D::BorrowTarget(const IntRect& aPersistedRect,
|
||||||
bool aNeedsClear) {
|
bool aNeedsClear) {
|
||||||
if (!mBufferProvider || mBufferProvider->RequiresRefresh()) {
|
// We are attempting to request a DrawTarget from the current
|
||||||
|
// PersistentBufferProvider. However, if the provider needs to be refreshed,
|
||||||
|
// or if it is accelerated and the application has requested that we disallow
|
||||||
|
// acceleration, then we skip trying to use this provider so that it will be
|
||||||
|
// recreated by EnsureTarget later.
|
||||||
|
if (!mBufferProvider || mBufferProvider->RequiresRefresh() ||
|
||||||
|
(mBufferProvider->IsAccelerated() && mWillReadFrequently)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
mTarget = mBufferProvider->BorrowDrawTarget(aPersistedRect);
|
mTarget = mBufferProvider->BorrowDrawTarget(aPersistedRect);
|
||||||
|
@ -1564,7 +1570,9 @@ bool CanvasRenderingContext2D::TryAcceleratedTarget(
|
||||||
// to be refreshed and we should avoid using acceleration in the future.
|
// to be refreshed and we should avoid using acceleration in the future.
|
||||||
mAllowAcceleration = false;
|
mAllowAcceleration = false;
|
||||||
}
|
}
|
||||||
if (!mAllowAcceleration) {
|
// Don't try creating an accelerate DrawTarget if either acceleration failed
|
||||||
|
// previously or if the application expects acceleration to be slow.
|
||||||
|
if (!mAllowAcceleration || mWillReadFrequently) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
aOutDT = DrawTargetWebgl::Create(GetSize(), GetSurfaceFormat());
|
aOutDT = DrawTargetWebgl::Create(GetSize(), GetSurfaceFormat());
|
||||||
|
@ -1816,6 +1824,8 @@ CanvasRenderingContext2D::SetContextOptions(JSContext* aCx,
|
||||||
return NS_ERROR_UNEXPECTED;
|
return NS_ERROR_UNEXPECTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mWillReadFrequently = attributes.mWillReadFrequently;
|
||||||
|
|
||||||
mContextAttributesHasAlpha = attributes.mAlpha;
|
mContextAttributesHasAlpha = attributes.mAlpha;
|
||||||
UpdateIsOpaque();
|
UpdateIsOpaque();
|
||||||
|
|
||||||
|
|
|
@ -750,6 +750,9 @@ class CanvasRenderingContext2D : public nsICanvasRenderingContextInternal,
|
||||||
|
|
||||||
// Whether we should try to create an accelerated buffer provider.
|
// Whether we should try to create an accelerated buffer provider.
|
||||||
bool mAllowAcceleration = true;
|
bool mAllowAcceleration = true;
|
||||||
|
// Whether the application expects to use operations that perform poorly with
|
||||||
|
// acceleration.
|
||||||
|
bool mWillReadFrequently = false;
|
||||||
|
|
||||||
RefPtr<CanvasShutdownObserver> mShutdownObserver;
|
RefPtr<CanvasShutdownObserver> mShutdownObserver;
|
||||||
virtual void AddShutdownObserver();
|
virtual void AddShutdownObserver();
|
||||||
|
|
Загрузка…
Ссылка в новой задаче