At the JNI bridge, Region::Op::kReplace_Op is detected and sent
to new functions on Canvas.h -> emulateReplaceClip[Rect|Path].
The SkiaCanvas implementation calls
SkAndroidFrameworkUtils::ResetClip to turn the SkCanvas' clip
wide open (modulo the device clip restriction), followed by
an intersect op with the actual clip geometry.
SkiaCanvas is also updated to record the replace ops in its
Clip struct for partial saves.
This should result in no visible behavioral change at the Java
Canvas level, but allows the removal of the
SK_SUPPORT_DEPRECATED_CLIPOPS flag.
Test: Updated SkiaPipeline.clip_replace unit test to use the new
emulateReplaceClipRect function instead of SkClipOp::kReplace.
Builds and recently added CTS tests for clip ops pass.
Bug: b/151725198
Bug: b/143352151
Change-Id: I8fb8765b4ead92bbe8eceadb52710a5673b6cf6b
Update Paint and SkiaCanvas now that SkFilterQuality is no longer
part of Skia's API.
1. Store mFilterBitmap:bool directly in Paint (matching java side)
2. Change Looper construct to operate on Paint rather than SkPaint
... so it can access mFilterBitmap.
3. Update PaintFilter to take Paint instead of SkPaint
As before, when we do have to call SkCanvas, we convert Paint's
mFilterBitmap into SkSamplingOptions as needed.
Test: make
Bug: 178700363
Change-Id: I7fccf17657d4e255f2453b4bfc513215503597b2
Add force-dark support to RippleDrawable by modifying the ink color.
Test: manual
Test: atest CanvasOp
Fixes: 186130682
Change-Id: I89eaaf3afa5ec53a74d2d08de8cff6484e55a912
ForceDarkAllowed is true.
In this condition, text seems be bold so far.
From now, in this case, text would have black outline, white inline
color.
this is related to
https://partnerissuetracker.corp.google.com/u/1/issues/175363190.
Test: Repro steps in bug; make
Bug: 175363190
Change-Id: Icf0048ef8d55c2e29676944c24c2050f531616d5
nine-patch draws now route through onDrawImageLattice, and canvas no
longer ever calls onDrawImageNine.
Test: make
Change-Id: Ie1d5b0c72690a4986e97efa1feeb736ef704a079
Fix WebView crash, which is specific for Vulkan pipeline
introduced by ag/8550137.
VkFunctorDrawable expects SkDrawable::onSnapGpuDrawHandler
callback instead of SkDrawable::onDraw.
This CL invokes SkCanvas::drawDrawable/SkGpuDevice::drawDrawable,
which has the logic to invoke onSnapGpuDrawHandler.
Test: Don't crash WebView with Vulkan pipeline, pass CTS
Change-Id: Ia98f159511f4ad2dbdbe0d53f0aec2f8c6db263b
Drawables are mutable, and not expected to produce the same content if retained for longer than the
duration of the frame. This becomes relevant when recording multi-frame SKPs because the
serialization step forces drawables to be played back long after the frame completed. By resolving
the drawable when we are drawing the frame we avoid ref'ing the SkDrawable and do not extend its
lifetime beyond the frame.
Bug: skia:9234
Test: Captured SKPs on a Pixel 3
Change-Id: I5d317dd14e20be9d5e18675df8667327bd05aff0
Put WebViews in a HW layer, if the clip is a non-rect.
This CL reuses logic implemented by ag/705975. This used
to be the way GL WebViews were drawn in Android M.
Implement complex clip detection at recording
time, which was not previously supported by the canvas.
Vulkan WebViews using GL interop are already drawn
in a layer, but this CL will be useful when WebView
supports new Vulkan interop.
Test: WebView CTS pass for Vulkan and GL
Bug: 115613038
Change-Id: I9b02c6f4de8efd504a7507633f3d849004215a16
Instead of allocating a separate renderTarget and switching
between them on each draw the new implementation follows the same
pattern that the old HWUI renderer used. The area of the layer is
now copied to a buffer on the GPU, the area is then cleared, rendered
as normal, and finally the texture is redrawn using dst_over blending.
This results in no render target switches and is considerably faster
on some hardware.
Test: CtsGraphicsTestCases, CtsUiRenderingTestCases
Bug: 119222339
Change-Id: I716aac1fc31e4c7a171373d37dee82034c01cf18
Skia now routes drawText, drawPosText, drawPosTextH to textblobs, so
these virtuals are no longer needed/called.
Test: make
Change-Id: Ia9d98d6c4ac72cea4ed9ed938b5fd29dbfe8bf49
When closing a namespace a } is sufficient. It doesn't need to be };
like closing a class or enum.
Within frameworks/base/libs/hwui there is a mix between } and }; when
closing a namespace. There are even mixes between a .h and the
corresponding .cpp files.
In a separate CL I was asked to not close with };. That was a good
comment. I adopted the style from nearby code. This CL cleans up the
nearby code.
Test: I made sure the code still built as expected.
Change-Id: Ieb314a4f48d6e33752463f3be4361fdc9be97482
Support palette for ninepatches (fixes popupwindow)
Crude heuristic tweak to treat any RenderNode that fully
contains other nodes as background nodes.
Test: all apps is now readable, and so is chrome's menu
Change-Id: I9926973c0be1dbf0088fa2d61e4ee2a414b19a97
Handles transform of basic bitmaps
Tweak to always treat text as foreground
Test: builds, poked around with force_dark
Change-Id: I733d39e05067438335da5a7eac06111f66f1228d
We explicitly use the "image" class member, instead of the function
parameter, since we've already used move() on the function
parameter.
Test: TreeHugger
Change-Id: I631517ca7cbf7cc59f75f8a66b125be4ee391944
First step of many
* Pulls SkLiteDL and SkLiteRecorder into HWUI
* forceDark shifted to be a sync-time transformation
instead of record time. No meaningful behavior change,
but much more flexible heuristics are possible this
way.
Test: build, poked around with forceDark on
Change-Id: I7b7cec5b7fd7c2b18823b4d92d821cf5898f9b88
This removes the duality of DisplayList, removing a small amount of
overhead
Test: buids & hwuiunit passes
Change-Id: I8bb3a20e9ead1caec4b4a8a3e9f2c08f717a7096
The current implementation schedules the next frame of the images
to be decoded after the current frame completes but potentially
schedules tasks that will result in a no-op execution if a new
frame is not yet needed.
Test: HwAccelerationTest
Change-Id: I0510cb5a1b801abd651327e924deb586af0306d6
Bug: 63909536
Bug: 63908092
Test: TODO
If ImageDecoder.decodeDrawable is called with an animated image Source
(currently GIF or WebP), return an object of a new (hidden) Drawable
subclass. The new Drawable animates, and it implements Animatable (TODO:
implement Animatable2) so users have some control over the animation.
In addition to the normal features of Drawable, this new one supports
many of the features of ImageDecoder, including scaling, cropping and
PostProcess, which enables circle masks/rounded corners and other
arbitrary after-effects. It does *not* support decoding directly to a
Hardware Bitmap, since it cycles through frames and reuses the same
bitmap memory. But it could be made to use shared memory (TODO?).
TODO: Use a better number for the native allocation registry
TODO: Use the RenderThread to drive the animation, and remove decoding
on the UI thread.
TODO: Add support for modifying the loop count
Android.bp:
- build new AnimatedImageDrawable.cpp
AndroidRuntime.cpp:
- register new native methods
AnimatedImageDrawable.java
AnimatedImageDrawable.cpp:
- new Drawable that handles animated images
Canvas.h, SkiaCanvas.h/.cpp
- New virtual method and implementation for drawing SkAnimatedImages
RecordingCanvas.h/.cpp
- Stub implementation of drawing SkAnimatedImages
ImageDecoder.h/cpp
- Allow code sharing with AnimatedImageDrawable.cpp
- postProcess
- access the ImageDecoder struct
Depends on https://skia-review.googlesource.com/c/skia/+/94660 in Skia.
Change-Id: Ie2ec98d9c52deda4d439c6ef8e5dea2861bb93a3
Avoid one memcpy in Canvas::drawGlyphs for all pipelines.
Test: CTS passed with exception of SweepTests#testBasicDraws
shadowtext, which fails with and without this CL.
Change-Id: I0841232dc7a6173eb3b03f939dbde15a84186296
The PaintUtils helper is now shared between all pipelines and was
missing a quick reject test for drawLoopers which are used in
view.setShadowLayer and supported in the Skia pipelines.
Bug: 35809097
Test: added hwui unit test and verified in DocumentsUI app
Change-Id: I3c4a988f1c42b7f421f78ac3659af1daee910ea2
This API is difficult to support for printing and has other negative
effects as it does not respect the current matrix/clip.
Test: compile
Bug: 14650725
Change-Id: I71f9bd687d446c7ce8910d755421aad8e09458db
on a per RenderNode basis. With Skia renderer we
see 30% speed improvement in Invalidate Tree UI Jank test,
when SkiaDisplayList objects are reused.
Test: manually built and run on angler-eng.
Change-Id: Ie4ec50ddb2015150e3ec678dde7ebed0c8d90067