Merge "Make ImageWallpaper handle WallpaperService messages on its own thread"

This commit is contained in:
Yasin Kilicdere
2022-11-30 17:07:20 +00:00
committed by Android (Google) Code Review
2 changed files with 23 additions and 2 deletions

View File

@@ -2183,6 +2183,17 @@ public abstract class WallpaperService extends Service {
}
}
/**
* Returns a Looper which messages such as {@link WallpaperService#DO_ATTACH},
* {@link WallpaperService#DO_DETACH} etc. are sent to.
* By default, returns the process's main looper.
* @hide
*/
@NonNull
public Looper onProvideEngineLooper() {
return super.getMainLooper();
}
private boolean isValid(RectF area) {
if (area == null) return false;
boolean valid = area.bottom > area.top && area.left < area.right
@@ -2215,12 +2226,12 @@ public abstract class WallpaperService extends Service {
Engine mEngine;
@SetWallpaperFlags int mWhich;
IWallpaperEngineWrapper(WallpaperService context,
IWallpaperEngineWrapper(WallpaperService service,
IWallpaperConnection conn, IBinder windowToken,
int windowType, boolean isPreview, int reqWidth, int reqHeight, Rect padding,
int displayId, @SetWallpaperFlags int which) {
mWallpaperManager = getSystemService(WallpaperManager.class);
mCaller = new HandlerCaller(context, context.getMainLooper(), this, true);
mCaller = new HandlerCaller(service, service.onProvideEngineLooper(), this, true);
mConnection = conn;
mWindowToken = windowToken;
mWindowType = windowType;

View File

@@ -29,6 +29,7 @@ import android.hardware.display.DisplayManager;
import android.hardware.display.DisplayManager.DisplayListener;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.SystemClock;
import android.os.Trace;
import android.os.UserHandle;
@@ -101,6 +102,15 @@ public class ImageWallpaper extends WallpaperService {
mMainExecutor = mainExecutor;
}
@Override
public Looper onProvideEngineLooper() {
// Receive messages on mWorker thread instead of SystemUI's main handler.
// All other wallpapers have their own process, and they can receive messages on their own
// main handler without any delay. But since ImageWallpaper lives in SystemUI, performance
// of the image wallpaper could be negatively affected when SystemUI's main handler is busy.
return mWorker != null ? mWorker.getLooper() : super.onProvideEngineLooper();
}
@Override
public void onCreate() {
super.onCreate();