There's also no need to offload WallpaperManager#forgetLoadedBitmap
because Bitmap#recycle is asynchronous - and the whole method is
synchronized.
Fixes 77597550
Test: atest cts/tests/framework/base/activitymanager/src/android/server/am/ActivityManagerMultiDisplayTests.java
Change-Id: I88014e21bd05e10c2f524393bb637596708e4e63
Added logging to make it easier to debug and
re-route drawing problems.
Test: Set wallpaper, look at logs.
Test: Rotate screen, look at logs.
Bug: 70361780
Change-Id: I894bc6217b1ffd804a07f0f631f57d72b968dd63
Wallpaper would have the wrong placement during
first frame because it would be center aligned
in a surface that's not big enough.
Also removed old OpenGl implementation, in favor of new
hardware accelerated canvas.
Change-Id: Ic9c9eaa817e1f6494aa5431d8278f2c28b2c45a9
Fixes: 66926914
Test: set wallpapaer with different offsets, orientations and devices
Let's just wait until the current async task finishes,
the engine will be recreated if the bitmap changes.
Test: Set wallpaper, no black frame
Change-Id: Icad8c18095119e9e035efc04704bc6d2d35af6d9
Fixes: 63065764
Emulator can use host GPU for rendering and supports GLES 2 already.
The isEmulator() logic is not only unnecessary but also causes the
launcher to have black background.
BUG: 33788018
Change-Id: Ib6d942490e8808e202c444f96becec1b75953838
Forgetting the wallpaper requires holding the wallpaper
manager lock - which is also held when the bitmap is
read from disk. To prevent blocking the main thread,
we need to offload the forget operation to the background
too.
Change-Id: Ic20c4f5fd86b788efd5b77a417108383dda343b9
Fixes: 28769940
Test: manually change wallpaper, rotate screen
- Add tracing when drawing ImageWallpaper.
- Don't force a redraw in onSurfaceRedrawNeeded. This only adds
another unnecessary draw and doesn't do anything useful.
onSurfaceRedrawNeeded is only here so the client can block.
- Delay entrance animation by one frame so wallpaper can be drawn
before the transition is starting.
- Add some delay for animating the tasks up in recents to match that
delay (it wasn't matched before at all).
- Fix an issue where launchedFromHome was wrong while docking.
Bug: 28769940
Change-Id: I2b763ed40078541328a1e04ffecf5b0a520fe019
TRIM_MEMORY_UI_HIDDEN > TRIM_MEMORY_RUNNING constants, so we only
need to throw away the wallpaper if we are actually running low on
memory.
Bug: 28769940
Change-Id: I8aa27d081bbcc2eff553e9420b2b9b0920f3781f
Previously, the wallpaper would draw even when
the surface had been destroyed, leading to
crashes.
Change-Id: I6465e832abb3bfd92495bca9b60dac474b35f6d6
Fixes: 28329816
Fixes a bug where the image wallpaper size
would not correctly update. Suspected cause
is checking the to-be-requested size against
the current surface size instead of the
requested surface size.
Also removes an unused field.
Bug: 21148936
Change-Id: Ief4585bd5aed5922337709d7ae0ca0bf948649d0
Previously we fetched rotation and dimens separately
which had the potential to cause inconsistencies.
Bug: 21440533
Change-Id: Ic537dbc01fc27af14124b1d97d4babafb6bc15f8
[Preconditions]
open auto-rotate
[Procedures]
1.enter Contacts app, and rotate 90 degrees to the right
2.press power key to lock screen,and unlock
3.rotare 90 degrees to the left and exit Contacts app
4.the wallpaper will be black first,then show the really wallpaper
Release SurfaceTexture after use in ColorFade and delete GL resources
in ImageWallpaper.
Bug: 17871993
Change-Id: I05bda03657ca502ba35b7187b6f361018f7ef687
Bug: 11997581
- ignore suggested dimensions
- when orientation changes, scale up wallpaper if
it doesn't fill the whole screen, or scale back to
original size if not necessary
Change-Id: I75b7519a105d4097bf7a35cd8af61fc40f45f8fb
(cherry picked from commit 824a4b5ea4)
Step to reproduce it on Nexus 10 with 4.4.2(KOT49H):
1. Long press on home screen.
2. Choose wallpaper from Wallpapers.
3. Select new wallpaper and set it.
4. Repeat step 1-3 several times.
See black background instead of the wallpaper.
There are two binder objects who hold reference to the
ImageWallpaper$DrawableEngine, which keeps the big chunk
bitmap from being recycled.
One is WallpaperService$IWallpaperEngineWrapper. The client
references went away slowly, maybe several minutes after
changing wallpaper. Then the finalizer has to been executed
to GC it.
The other one is WallpaperService$Engine$BaseIWindow. Don't
know who still held reference to it even after the window
was removed.
Anyway, let the bitmap be GCed first.
Change-Id: I27f6971a3edd26472b69e59b542b27fd7c8e7b90
Signed-off-by: jshe32X<jianchunx.shen@intel.com>
Signed-off-by: Guobin Zhang <guobin.zhang@intel.com>
- ignore suggested dimensions
- when orientation changes, scale up wallpaper if
it doesn't fill the whole screen, or scale back to
original size if not necessary
Change-Id: I75b7519a105d4097bf7a35cd8af61fc40f45f8fb
Previously the call to glClear was executed when there was no
available space (i.e. space which the Bitmap would *not* be drawn in
on the background of the launcher), rather than when there was.
Inverting the checks fixes this problem.
Also, remove unnecessary Handler since the call to updateWallpapers
is done via one-way binder interface and wrapped in a synchronize
block anyways. Putting it on the Handler just put it on the main
looper of the context that created WallpaperManager, which isn't
necessary.
Change-Id: Ic7a323303ec6e354d1ef245eec3434ff7128432d
Currently it's possible for the home application to suggest new
wallpaper dimensions and the WallpaperService to request the bitmap
between when the new dimensions have been propagated and the old
bitmap has been forgotten. This leads to the WallpaperService
drawing a Bitmap with the old dimensions into a Surface with the new
dimensions.
By forcing the WallpaperManager to forget the old Bitmap immediately
before we reload it, we can ensure that we always have a Bitmap of
the correct size.
Bug: 10853302
Change-Id: I298ac5f3f8bcde54eeb1e45d21bf2ba3cbb618c9
Previous work in ImageWallpaper cached the bitmap for a user
to avoid reloading it (an expensive operation on large-display devices)
when we could simply re-use it. User switching still caused a reload, however,
since the place where we cache the bitmap (ImageWallpaper) is in an instance
that is re-created on user-switch.
A simple fix is to have the ImageWallpaper stop telling the WallpaperManager
to erase its own cache of the bitmap prior to re-loading it. That step is
unnecessary, since a bitmap that is cached can be assumed to be valid. A wallpaper
change will correctly null out that cached version, so if the cached bitmap
is non-null, then we can simply use it as-is.
The fix is to remove the call to forgetLoadedWallpaper() and allow the caching
mechanism to do its job.
Issue #7986933 user switching on lock screen is slow (sometimes like molasses)
Change-Id: I447754ab85337bc8ae59b4ad6c3e6c2b30e13735
A previous fix made initializing GL work better by calling eglMakeCurrent()
prior to querying the max texture size. However, that fix worked by creating an eglSurface
earlier than we did before, which for some reason causes problems later if wallpaper creation
fails and we back off to a software solution.
This new fix creates a temporary pbuffer surface instead, which still allows us to make the
call to eglMakeCurrent() prior to querying the max texture size, but does not result in the
later canvas lock failure if the wallpaper creation fails anyway.
Issue #8319960 sluggish yakju animations over launcher
Change-Id: I394d672549260a354f03ad9fd1b9e1f9a161a371
ImageWallpaper was sometimes querying GL for a max texture size too early
(before the first call to eglMakeCurrent()). This problem caused the wallpaper
to then get created in software, resulting in noticeably slower performance
when the wallpaper was visible.
This fix ensures that the
makeCurrent happens before the query, ensuring that wallpapers of the right
size actually get created instead of failing due to this error at creation time.
Issue #8319960 sluggish yakju animations over launcher
Change-Id: I12a3eba9f1818bdf544691e0727fe12f7e820651
Bug #8230579
If the wallpaper fails to render with OpenGL, fall back to software
rendering instead of throwing an exception and crashing the wallpaper.
Change-Id: I40ed6056e6ea09b92b6cd441f16101dcc296fb8e
This fixes an issue where OpenGL initialization succeeds but buffer allocation fails because the requested wallpaper size
is too large (or otherwise unsupported) by the graphics hardware. This fixes an issue where SystemUI crashes constantly
on the PandaBoard when connected to a full HD display. Tested only on PandaBoard, no access to alternative hardware.
Signed-off-by: Wim Vander Schelden <wim.vander.schelden@philips.com>
Change-Id: I8d2e1ae9fd9772977c4e365f23f2f58bbca3787c
Bug #8066455
ViewRootImpl was properly detecting that the renderer was not
ready to draw but would simply schedule another frame, thus sending
the systemui into an inifite redraw loop. This change reinitializes
the renderer if needed (if the renderer is requested but not enabled.)
This CL also fixes an issue caused by the default wallpaper. Since it
never calls eglTerminate(), managed contexts are never reclaimed.
Change-Id: Idb8caa672be8ee35f6e6a7e942d9abd8aa100967
ImageWallpaper runs on the main thread now and doesn't need to add
callbacks on different threads or lock against concurrent access.
Bug 7326921 fixed.
Change-Id: I6097e1dff8af743a4fb81b697efee0e02667125b
Give the GC a chance to collect the current bitmap if it needs to,
as it allocates memory for the next one. This helps avoid OOM situations
that can sometimes occur in extreme circumstances (huge bitmaps)
Also set the default_wallpaper to the right default size.
Issue #7352961 Wallpaper edge is cut-off while scrolling through home page
Change-Id: If76b55061d04b29af7f66a6162e307b8b53bf4ae
Previous logic compared the surface size to the bitmap size to determine
whether to reload the bitmap. This was based on an assumption that the bitmap
would be created at the same sizea s the surface. However, the process of
how those sizes get determined is different for surfaces and wallpapers, causing
an occasional issue where the bitmap gets reloaded frequently, every time the wallpaper
is asked to redraw, even though it always gets recreated at the same size.
New logic checks previous surface dimensions against current surface dimensions to
determine whether the bitmap should be reloaded; we really only want to reload
it when the surface size changes.
Issue #7373200 pause when toggling between All Apps and Home screen; Home button stays illuminated for a long time
Change-Id: I108777b72bd42616ad7cf8274af1b3e6b2ed94e7
Typo in ImageWallpaper made a dimension check incorrect.
Issue#7373200 pause when toggling between All Apps and Home screen; Home button stays illuminated for a long time
Change-Id: I82763ac8c9ed564eba904f552975ab20c8aef932
Switching users causes wallpapers to get recreated 3 times. Other operations
like startup and rotation cause similar redundant load/draw operations. This change
tracks the various attributes that tell us when we really need to reload
and redraw, causing only one of these expensive operation per one of these
switches.
Issue #7334664 Wallpaper draws several times when switching users
Change-Id: Ic3072ef3a7eaf622d8632e87e34f50999f716c39
Update the wallpaper and redraw it unconditionally when the surface
changes. Previously we were not updating the wallpaper when the
surface changed which meant that it remained at the original surface
dimensions. Also, the indication that it was visible comes in too
late to display it cleanly without jank.
Bug: 7310334 fixed.
Change-Id: Ic2ae95ea0b0704183053da1d7a906818651c62c9
Screen rotations force static wallpapers to get recreated. One of the things
that happens is that the underlying bitmap resource is loaded. This can be quite
expensive for large bitmaps (which is the case on large-display devices).
A simple optimization is to retain the bitmap in the wallpaper process, to avoid
this re-loading step. We still re-draw and re-upload the texture, but at least
we don't re-load the thing.
Issue #7324823 Manta wallpaper decode performance is atrocious
Change-Id: I0748e275a55992d13704a7dec5910d2dbdc9e2a4