Commit Graph

4645 Commits

Author SHA1 Message Date
Kohsuke Yatoh
c2832239d9 Merge "Preload minikin LocaleListCache in Zygote." 2022-07-20 17:35:59 +00:00
Kohsuke Yatoh
bb4e06fde0 Preload minikin LocaleListCache in Zygote.
This saves ~31 KB per process on oriole.

Bug: 174672300
Test: atest CtsGraphicsTestCases:android.graphics.cts.TypefaceTest
Change-Id: Ic70ea842985a0aca441a31327e41980ed47bc961
2022-07-19 06:13:03 +00:00
Kohsuke Yatoh
d7afbefd40 Merge "Add Typeface memory perf test." 2022-07-19 03:05:42 +00:00
Kohsuke Yatoh
9feb92f945 Add Typeface memory perf test.
This test measures:
- SharedMemory (mmap) byte size of serialized font map.
- Native allocation (malloc) byte size of deserialized font map.

Typeface is updated to avoid OOM during test.

Results on oriole-userdebug:

[1/5] android.graphics.perftests.TypefaceSerializationPerfTest#testSerializeFontMap: PASSED (29.222s)
	testSerializeFontMap_stddev (ns): 74859
	testSerializeFontMap_mean (ns): 1560404
	testSerializeFontMap_median (ns): 1549601
	testSerializeFontMap_percentile90 (ns): 1602499
	testSerializeFontMap_percentile95 (ns): 1624715
[2/5] android.graphics.perftests.TypefaceSerializationPerfTest#testSerializeFontMap_memory: PASSED (13.376s)
	testSerializeFontMap_memory_stddev (ns): 0
	testSerializeFontMap_memory_mean (ns): 931071
	testSerializeFontMap_memory_median (ns): 931071
	testSerializeFontMap_memory_percentile90 (ns): 931071
	testSerializeFontMap_memory_percentile95 (ns): 931071
[3/5] android.graphics.perftests.TypefaceSerializationPerfTest#testDeserializeFontMap: PASSED (32.451s)
	testDeserializeFontMap_stddev (ns): 60524
	testDeserializeFontMap_mean (ns): 232285
	testDeserializeFontMap_median (ns): 228149
	testDeserializeFontMap_percentile90 (ns): 272094
	testDeserializeFontMap_percentile95 (ns): 291708
[4/5] android.graphics.perftests.TypefaceSerializationPerfTest#testDeserializeFontMap_memory: PASSED (29.089s)
	testDeserializeFontMap_memory_stddev (ns): 134
	testDeserializeFontMap_memory_mean (ns): 170209
	testDeserializeFontMap_memory_median (ns): 170208
	testDeserializeFontMap_memory_percentile90 (ns): 170208
	testDeserializeFontMap_memory_percentile95 (ns): 170208
[5/5] android.graphics.perftests.TypefaceSerializationPerfTest#testSetSystemFontMap: PASSED (28.687s)
	testSetSystemFontMap_stddev (ns): 2345934
	testSetSystemFontMap_mean (ns): 649662
	testSetSystemFontMap_median (ns): 396260
	testSetSystemFontMap_percentile90 (ns): 436483
	testSetSystemFontMap_percentile95 (ns): 457479

Bug: 174672300
Fix: 238679890
Test: atest CorePerfTests:android.graphics.perftests.TypefaceSerializationPerfTest
Change-Id: Idb0c2a040d3ca488134f2b91a5bcbbe33a7a59c4
2022-07-15 06:20:07 +00:00
Haoyu Zhang
c8abba4907 Introduce TextLine#measureAllbounds
This new method computes the horizontal character bounds by making
use of the character advances returned from native layer. It'll be
used in TextView to populate character bounds, and it's much efficent
compared to calling getPrimaryHorizontal for each character.

Bug: 233922052
Test: atest android.text.TextLineTest
Change-Id: Icdd53e61e2d1513b2231affb19bb00ea5d938d48
2022-07-08 12:50:32 -07:00
Brian Osman
0547bffe40 Fix example AGSL code in the javadoc comments
Bug: b/237562620
Change-Id: I5f562b70d04bc86779190002a2640fb51dc00531
2022-06-29 20:35:03 +00:00
Jernej Virag
ddb2e4b624 Merge "Describe image loads in Traces" into tm-qpr-dev am: bb5c810092 am: 083e6141a4
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18805637

Change-Id: I986e8060f9529c320bba0a0c5375121f03de4516
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-06-27 10:03:35 +00:00
Jernej Virag
4dc2e413c6 Describe image loads in Traces
This adds tracing to ImageDecoder for image loads. When a drawable is
being loaded, it'll emit a short description of the resource and desired
loading sizes. This will make it significantly easier to find large,
slow bitmap loads when debugging regressions.

Bug: 235451049
Test: physically on a Raven device
Change-Id: I615342f1bd11d867e0bd33209507330848df8525
2022-06-20 09:14:03 +00:00
TreeHugger Robot
8745d54ced Merge "Reduce RippleDrawable background opacity when no window focus" into tm-qpr-dev 2022-06-09 15:18:20 +00:00
Louis Chang
18614db0dd Merge "Reduce RippleDrawable background opacity when no window focus" 2022-06-07 10:36:54 +00:00
Charles Chen
acf17e37e1 Merge "Respect minimum dimensions for embedded Activities" into tm-qpr-dev am: cc0966bfd7 am: 3b35b433bd
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18659388

Change-Id: Ib2d68131f04f5335cb5eecd676733d548f31b3e5
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-06-01 09:39:08 +00:00
Louis Chang
642279e214 Reduce RippleDrawable background opacity when no window focus
Lower the background opacity when the window loses focus
while the view still has focus, in order to prevent user
confusion in a multi-window environment.

Bug: 230355625
Test: manually verified
Change-Id: I59cd7faf35f05a12451f015f8ef2da47077b1bf2
Merged-In: I59cd7faf35f05a12451f015f8ef2da47077b1bf2
2022-06-01 15:18:54 +08:00
Louis Chang
72c111de2c Reduce RippleDrawable background opacity when no window focus
Lower the background opacity when the window loses focus
while the view still has focus, in order to prevent user
confusion in a multi-window environment.

Bug: 230355625
Test: atest RippleDrawableTest
Change-Id: I59cd7faf35f05a12451f015f8ef2da47077b1bf2
2022-06-01 07:16:35 +00:00
Charles Chen
482fbfabd7 Respect minimum dimensions for embedded Activities
Before this CL, minimum dimensions of Activity wasn't respected,
that said, an Activity could be embedded in a TaskFragment of which
bounds are smaller its minimum dimensions.
This CL add the minimum dimensions on several places:

WM core:
1. Verify minimum dimension requirement before adding an Activity to
   a TaskFragment. It'll be early return if the requirement is not
   satisfied.
2. Propagate the minimum dimensions to the client side through
   TaskFragmentInfo to notify the requirement.
3. If TaskFragmentOrganizer tries to shrink a TaskFragment to
   the bounds that smaller than minimum dimensions of its children
   Activity, switch to match the parent bounds.
AndroidX Window extensions:
1. Early return if TaskFragment is resized to the bounds that smaller
   than minimum dimensions which dispatched from the server side.
2. When organizer tries to show Activities side-by-side, verify if
   minimum dimensions requirement of the primary Activiy. If the
   requirement is not satisfied, show Activities in fullscreen
   instead.
TODO: Add an API to check if an Activity intent is allowed to embed
   in a TaskFragment.

Bug: 232871351
Test: atest TaskFragmentOrganizerControllerTest
Test: atest TaskFragmentOrganizerTest TaskFragmentOrganizerPolicyTest
Test: atest SplitActivityLifecycleTest
Test: atest CtsWindowManagerJetpackTestCases
Test: atest WmJetpackUnitTests

Change-Id: Ib46c2cec2a0735b9e3f3420f2cb94754801b86b9
2022-05-31 23:25:18 +08:00
Nader Jawad
a2cae5e641 Merge "Fix memory leak with RenderNodeAnimator" into tm-dev am: b9a8ed8b70 am: e983d06e90
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18290468

Change-Id: I7bcedf4852b5bc11053579d93ad6a56db02ae777
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-05-11 21:35:30 +00:00
Nader Jawad
b9a8ed8b70 Merge "Fix memory leak with RenderNodeAnimator" into tm-dev 2022-05-11 16:49:16 +00:00
Nader Jawad
528b0d2824 Fix memory leak with RenderNodeAnimator
Update View logic to cancel all RenderNodeAnimators
when it is detached from a window.
Updated HWUI Animation logic to enable a cancellation
flag to cancel all animators operating on a RenderNode
whenever the staging parameters are pushed to RenderThread

Fixes: 229136453
Test: Added core test to RenderNodeAnimatorTests
Change-Id: Id674e8474757bfc8dfe30394dde29da49d139bfc
2022-05-10 14:02:40 -07:00
Rob Carr
1f4462425c Merge "ViewRootImpl/SurfaceView: Listen for queue stalls" into tm-dev am: 7a0ee72bff am: 38491dfa49
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17778270

Change-Id: Ic101688a91b0aec337897955c75f1cb6aeb52520
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-05-06 13:40:50 +00:00
Rob Carr
7a0ee72bff Merge "ViewRootImpl/SurfaceView: Listen for queue stalls" into tm-dev 2022-05-05 15:11:39 +00:00
Jay Aliomer
2884744b7d Merge "Set mask shader after matrix is set" into tm-dev am: b6dfbd9597 am: 08e2c2d119 am: 899482d5ab am: 038343c565
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17821505

Change-Id: Ic226704aa46e981f3970793541a247df9d4dcf83
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-05-02 12:46:25 +00:00
Jay Aliomer
b6dfbd9597 Merge "Set mask shader after matrix is set" into tm-dev 2022-04-30 13:28:28 +00:00
Jay Aliomer
dd1b5b147e Set mask shader after matrix is set
When the size of the drawable bounds changes, the mask shader is not updated properly
Assumed passed by reference instead of pass by value which resulted in
the wrong behavior

Fixes: 227624349
Test: RippleMicrobenchmark
Change-Id: Iedc3f06441414455fcfedf8cabd61e5b334a7441
2022-04-28 21:01:30 +00:00
TreeHugger Robot
26dc24dd83 Merge "Revert "Revert "Icon: make Icon's Bitmaps immutable""" into tm-dev am: edea3fd450 am: 490e830f87
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17943164

Change-Id: Ibf656a302bb0396619f55cdbd93905397b9a3896
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-04-28 00:08:15 +00:00
Tim Murray
e8c5addab3 Revert "Revert "Icon: make Icon's Bitmaps immutable""
This reverts commit 8fd35436fa.

Reason for revert: NotificationTemplateTest fixed
Test: atest CtsAppTestCases:android.app.cts.NotificationTemplateTest
Bug: 227920378

Change-Id: I61dc3cb7620d64a55deb669cb1f08f4676d36456
2022-04-25 17:49:24 +00:00
Xiaowen Lei
6bf1f57c55 Merge "Revert "Icon: make Icon's Bitmaps immutable"" into tm-dev am: 4e8c47efbb am: 015dabf6e3
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17919920

Change-Id: Ib8c158354b8144dfedab17a52547742c6f5793ff
Ignore-AOSP-First: this is an automerge
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-04-23 03:19:23 +00:00
Xiaowen Lei
8fd35436fa Revert "Icon: make Icon's Bitmaps immutable"
This reverts commit 47032a2095.

Reason for revert: DroidMonitor: Potential culprit for Bug 230140012 -
verifying through ABTD before revert submission. This is part of the
standard investigation process, and does not mean your CL will be
reverted.

Change-Id: I22f5aa5bd57e37d638292773986b479428e5cdbc
2022-04-22 23:26:47 +00:00
Tim Murray
dc9f4f0f30 Merge "Icon: make Icon's Bitmaps immutable" into tm-dev am: 227085759c am: 307dba797c
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17803565

Change-Id: I423e04c11dfed46f476d41a15546ae5d2e51bdea
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-04-22 18:21:45 +00:00
Michael Hoisie
f5733b0bda Remove unused native method Font$Builder.nGetReleaseNativeFont
The nGetReleaseNativeFont native method has been moved to the enclosing
Font class. JNI registration also does not occur for
Font$Builder.nGetReleaseNativeFont.

Test: m -j framework
Bug: 230032992
Change-Id: Ic987812cabe57c5c964b3cb8036cd7e297c11c36
2022-04-22 00:17:43 +00:00
Tim Murray
47032a2095 Icon: make Icon's Bitmaps immutable
Because Bitmap mutability is propagated across Parcel and Binder, the
following problem can happen when sending an Icon containing a Bitmap
as part of a Notification:

1. App creates Icon with a mutable Bitmap (1 alloc)
2. App sends Icon to system_server, often creating ashmem Bitmap (2 allocs)
3. system_server converts ashmem Bitmap back to heap Bitmap (3 allocs)
4. system_server sends heap Bitmap to each NotificationListener individually,
converting the heap Bitmap to ashmem each time (3+N allocs)
5. NotificationListener converts ashmem Bitmap to heap Bitmap (3+2N allocs)

This is inefficient. This is especially bad because the API to update
a Notification involves sending a full Notification object, including
Icons, repeatedly, and some apps do that several times per second.

Instead, ensure that all Bitmaps transmitted as part of Icons are
immutable. Instead, we get:

1. App creates Icon, which may copy to immutable Bitamp (1 or 2 allocs)
2. App sends Icon to system_server over ashmem (still 1 or 2 allocs)
3. system_server uses received ashmem Bitmap directly (still 1 or 2 allocs)
4. system_server sends same ashmem Bitmap to NotificationListeners (1 or 2)
5. Each NotificationListener uses the same ashmem Bitmap (1 or 2)

This solves the per-NotificationListener amplification, but it does
not solve sending what is likely the same Bitmap N times per second
when apps update Notifications. That will require either app changes
or Notification API changes to avoid bytewise comparisons for all
Bitmaps.

Test: boot, notifications work, memory in maps/gearhead remains good
Bug: 227920378

Change-Id: If92835f647a76da599f358c7c02888e3e2f59235
2022-04-21 18:54:53 +00:00
Robert Carr
7e53d0e9f5 ViewRootImpl/SurfaceView: Listen for queue stalls
Native machinery now reports queue stalls from native layer
up to java layer, which can more appropriately handle errors.
The first case we handle is the case of "stuck fences", generally
indicating GPU hangs. In this case we trigger a bespoke ANR rather
than waiting for an ANR in dequeueBuffers later. dequeueBuffers
ANR could have any number of causes, and this large cluster
is difficult to debug.

Bug: 216160569
Test: Existing tests pass
Change-Id: I7b4429ce96d0bbfa1b74534ddf2b447facb22d10
2022-04-15 15:13:04 -07:00
Chavi Weingarten
e3cc958b53 Merge changes from topic "presubmit-am-699bcbdaa9a54be3a56de1e065ef795a" into tm-mainline-prod am: 3f096a943a
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17693701

Change-Id: I6a4b314d3495da4dd6ac319859f0e3387902c5bc
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2022-04-13 00:57:14 +00:00
chaviw
845d5ad06e Default to true for updateDestinationFrame in BBQ
In most cases, we do want the destination frame to be updated by BBQ.
The exception is SV due to multiple threads involved in property
changes. Change the default updateDestinationFrame to true and let SV
set it to false for their scenario.

Test: Apps with NATIVE_WINDOW_SCALING_MODE_SCALE_TO_WINDOW work
Fixes: 228008717
Change-Id: I90ae6f0797633aa963c540a94f1cbaea9e498f23
2022-04-11 14:35:01 -05:00
Chavi Weingarten
62e3f326fa Merge "Add call to disable RT Animations" into tm-dev am: c1f9e4c0b9
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17264107

Change-Id: Ideeb0b457b0b9311bba472f41787d7a45912a981
2022-03-24 01:23:12 +00:00
Chavi Weingarten
0f9cba9546 Merge "Add forceDrawNextFrame function for HardwareRenderer" into tm-dev am: 3e3c3ab2da
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17263076

Change-Id: Iaf253798ddd4a0d752a4138aeff906ee8adb8a74
2022-03-24 00:54:04 +00:00
Chavi Weingarten
c1f9e4c0b9 Merge "Add call to disable RT Animations" into tm-dev 2022-03-23 23:23:35 +00:00
chaviw
adba0b1861 Add forceDrawNextFrame function for HardwareRenderer
The forceDraw flag in HardwareRenderer will ensure a frame is drawn when
requested even if it would end up drawing multiple frames in a single
vsync.

This is to help blast sync when we want to synchronize the
buffer. We want to make sure we are guaranteed a callback since we don't
want to wait for retries, especially in the case when trying to synchronize
multiple buffers.

There was already a global flag to handle this, but would use the flag
for all draws. This new function is set per draw so once a frame is
drawn it's unset. The global flag was only used for tests so updated the
test to set the flag before every draw and deleted the global property.

Test: Underlying code was in place. This is just piping a new setter. No
usages yet.
Test: TestSceneRunner
Bug: 200284684

Change-Id: Ie1c9950cabb7331cfed1721564a51a1a15cd1624
2022-03-22 18:08:38 -05:00
chaviw
01053d4350 Add call to disable RT Animations
HWUI already supports disabling RT animations, but there was no correct
way to call it from the application. Adding a call to enable or disable
RT animations on the RenderThread so RT animations can be disabled
during a blast sync.

Test: Builds
Bug: 200284684
Change-Id: Ia1ae3498c38b84b4975f08d37bc764f0c690ed9f
2022-03-22 15:41:24 -05:00
Allen Su
508818fc58 Merge "Text Wrapping automation" 2022-03-22 05:44:23 +00:00
allenwtsu
f70429088a Text Wrapping automation
Bug: 220836284
Test: atest StaticLayoutTest
Change-Id: I2aead872b0b472b3c625e075348e46da768ff3be
2022-03-22 11:16:57 +08:00
Jay Aliomer
973fc119c5 Merge "Fix faint ripple" into tm-dev 2022-03-21 17:03:41 +00:00
Jay Aliomer
475648ae02 Fix faint ripple
Fixes: 224547325
Test: manual
Change-Id: I9c1da7a5065dca9620ebc1f3d88d5525f0d3527c
2022-03-18 01:32:15 -04:00
Jeremy Meyer
88000ab26e Merge "Have Typeface pass a cookie of -1 to search through all assets" into tm-dev 2022-03-16 20:44:06 +00:00
Jeremy Meyer
a07474c452 Have Typeface pass a cookie of -1 to search through all assets
Without this, when font are overlayed it will fail because it is looking
in the wrong place to load the font

Bug: 151770185
Test: Manual, example app that has a font that is overlayed
Change-Id: I64c5a436b7250cfd0a75f5de36c64f07a20d523a
2022-03-15 23:52:15 +00:00
Garfield Tan
bce590e356 Merge "Add argument checks in setScale and setCrop" into tm-dev 2022-03-15 20:53:04 +00:00
TreeHugger Robot
e8acb4a612 Merge "Update the text wrapping API." into tm-dev 2022-03-14 23:09:41 +00:00
Jay Aliomer
579e07b4dc Ripple mask shader not drawing properly
Test: using a test app
Fixes: 200069735
Fixes: 188112758
Fixes: 198177042
Fixes: 189485964
Change-Id: Ibc08e9945b1a57483beb93fa428be1ab0a5da9bb
2022-03-10 13:24:00 -05:00
James.cf Lin
396c789426 Update the text wrapping API.
1) Update the LineBreakConfig class to be immutable.
2) Do not return null in the PrecomputedText.Params#getLineBreaiConfig API

Bug: 216638444
Test: atest TextViewTest; atest MeasuredTextTest; atest PrecomputedTextTest; atest TextViewPrecomputedTextTest; atest StaticLayoutLineBreakingVariantsTest
Merged-In: I93bcb6ebc35344e34e9bb8a24df375aa7b3a8d81
Merged-In: I07766137ff6639c7d4acaad07dbcf11a2841cdb0
Change-Id: I07766137ff6639c7d4acaad07dbcf11a2841cdb0
2022-03-10 09:58:40 +00:00
Garfield Tan
a9d72c8ac3 Add argument checks in setScale and setCrop
They are now public API, so they should perform the same checks as in
respective calls with ASurfaceTransaction.

Bug: 210837722
Test: atest SurfaceControlTest
Change-Id: I1f17f8402dc116a419189f31faf351ffa967ecda
2022-03-08 17:01:59 -08:00
TreeHugger Robot
3237439170 Merge "Add class level JavaDocs for RuntimeShader." into tm-dev am: d0359461d2
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17015736

Change-Id: I2c56377f60afc6df8a2b06e2fce3f028bd34d187
2022-03-08 01:49:00 +00:00
Derek Sollenberger
1d229b0890 Add class level JavaDocs for RuntimeShader.
Bug: 213869522
Test: N/A
Change-Id: I66e52575023839f70fa05048e4c08a4c6fc5faeb
2022-03-07 23:26:34 +00:00