diff options
| author | 2022-05-09 20:12:17 +0000 | |
|---|---|---|
| committer | 2023-03-30 00:45:49 +0000 | |
| commit | d58bdf9b9fcbcc8c941cf5b0565865c89b3400bb (patch) | |
| tree | ddbc4f07c4cb8b707ea87518d3f21cf43c38d225 | |
| parent | f9a77b961ffcae7db4bfc261101cabf82cd22228 (diff) | |
Upload bitmap to GPU in RemoteViews
Upload the bitmap to GPU when the RemoteView intends to use it.
Test: Manually verified that widget drawing method is accelerated by
approximately 2 micro seconds. The longest drawing time down from 52 micro seconds to 47 micro seconds.
Fix: 226298376
Change-Id: If57f3127dfa0c01550c8388a43a79acac37fcfb7
| -rw-r--r-- | core/java/android/widget/RemoteViews.java | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java index 18874f768929..3165654d806d 100644 --- a/core/java/android/widget/RemoteViews.java +++ b/core/java/android/widget/RemoteViews.java @@ -1780,6 +1780,21 @@ public class RemoteViews implements Parcelable, Filter { Object value = getParameterValue(view); try { MethodHandle method = getMethod(view, this.methodName, param, true /* async */); + // Upload the bitmap to GPU if the parameter is of type Bitmap or Icon. + // Since bitmaps in framework are seldomly modified, this is supposed to accelerate + // the operations. + if (value instanceof Bitmap bitmap) { + bitmap.prepareToDraw(); + } + + if (value instanceof Icon icon + && (icon.getType() == Icon.TYPE_BITMAP + || icon.getType() == Icon.TYPE_ADAPTIVE_BITMAP)) { + Bitmap bitmap = icon.getBitmap(); + if (bitmap != null) { + bitmap.prepareToDraw(); + } + } if (method != null) { Runnable endAction = (Runnable) method.invoke(view, value); |