diff options
author | Romain Guy <romainguy@google.com> | 2012-02-23 17:08:38 -0800 |
---|---|---|
committer | Romain Guy <romainguy@google.com> | 2012-02-23 17:08:38 -0800 |
commit | 4bcb7467a174ed03a67b0c62950c555813ddf00d (patch) | |
tree | 496ee923124a889d0a103fcc8dddba74515c2f81 /tests/HwAccelerationTest | |
parent | cfef12374c15b11b3c2a1041582be9728152e15d (diff) | |
download | frameworks_base-4bcb7467a174ed03a67b0c62950c555813ddf00d.zip frameworks_base-4bcb7467a174ed03a67b0c62950c555813ddf00d.tar.gz frameworks_base-4bcb7467a174ed03a67b0c62950c555813ddf00d.tar.bz2 |
Only recreate path textures when necessary
When a drawPath command is recorded in a display list, a copy of the
source path is made to preserve against possible modifications of the
said source path. Copies are discarded when a display list is cleared,
which usually happens on invalidate(). This means that even if a path
is never modified, the texture generated to draw it on screen is
destroyed every time an invalidate() is issued. This change fixes this
problem by introducing a reference to the source path in the copy.
If both the copy and the source path have the same genID, they are
the same path and can share the same texture.
Change-Id: I34849311c183e06336a1391d2d1568a087f973f6
Diffstat (limited to 'tests/HwAccelerationTest')
-rw-r--r-- | tests/HwAccelerationTest/src/com/android/test/hwui/PathsCacheActivity.java | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/PathsCacheActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/PathsCacheActivity.java index b8ad823..9ab2a86 100644 --- a/tests/HwAccelerationTest/src/com/android/test/hwui/PathsCacheActivity.java +++ b/tests/HwAccelerationTest/src/com/android/test/hwui/PathsCacheActivity.java @@ -92,19 +92,24 @@ public class PathsCacheActivity extends Activity { canvas.restore(); -// Path path = makePath(); -// int r = mRandom.nextInt(10); -// if (r == 5 || r == 3) { -// mPathList.add(path); -// } else if (r == 9) { -// mPathList.clear(); -// } -// -// canvas.save(); -// canvas.translate(550.0f + mRandom.nextInt(50), 60.0f + mRandom.nextInt(50)); -// canvas.drawPath(path, mMediumPaint); -// canvas.restore(); -// + for (int i = 0; i < mRandom.nextInt(20); i++) { + Path path = makePath(); + int r = mRandom.nextInt(10); + if (r == 5 || r == 3) { + mPathList.add(path); + } + + canvas.save(); + canvas.translate(450.0f + mRandom.nextInt(200), mRandom.nextInt(200)); + canvas.drawPath(path, mMediumPaint); + canvas.restore(); + } + + int r = mRandom.nextInt(100); + if (r == 50) { + mPathList.clear(); + } + invalidate(); } } |