diff options
| author | Romain Guy <romainguy@google.com> | 2012-10-18 15:05:02 -0700 |
|---|---|---|
| committer | Romain Guy <romainguy@google.com> | 2012-10-18 15:05:02 -0700 |
| commit | 7c25aab491707f7324f9941b8cfa9bd2b4b97e76 (patch) | |
| tree | 2e670c818c33bf2ead5342dad73b48e000d2e94c /core/java/android/view | |
| parent | b2e2f2470693e78baed20617f989d9a166864ed4 (diff) | |
| download | frameworks_base-7c25aab491707f7324f9941b8cfa9bd2b4b97e76.zip frameworks_base-7c25aab491707f7324f9941b8cfa9bd2b4b97e76.tar.gz frameworks_base-7c25aab491707f7324f9941b8cfa9bd2b4b97e76.tar.bz2 | |
Defer layer rendering to avoid stalls
Bug #7326824
When a layer is taken out of the cache and initialized it gets cleared
to prepare it for future rendering. This triggers the following sequence
of operations:
glBindFramebuffer(layer.fbo)
attach texture storage to FBO
glClear()
glBindFramebuffer(defaultFbo)
The clear forces a resolve on tilers which stalls the CPU for a little
while, thus producing jank during animations. This change moves the
clear to the next frame when we know we will have to execute a resolve
anyway.
Change-Id: Ic1939c25df20ed65a4c48dc81ee549b2cd8b6ec3
Diffstat (limited to 'core/java/android/view')
| -rw-r--r-- | core/java/android/view/HardwareRenderer.java | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java index ec1695e..59f941d 100644 --- a/core/java/android/view/HardwareRenderer.java +++ b/core/java/android/view/HardwareRenderer.java @@ -1200,7 +1200,12 @@ public abstract class HardwareRenderer { Trace.traceEnd(Trace.TRACE_TAG_VIEW); } - status = onPreDraw(dirty); + Trace.traceBegin(Trace.TRACE_TAG_VIEW, "prepareFrame"); + try { + status = onPreDraw(dirty); + } finally { + Trace.traceEnd(Trace.TRACE_TAG_VIEW); + } saveCount = canvas.save(); callbacks.onHardwarePreDraw(canvas); |
