Skip to content

Commit 88b03b1

Browse files
committed
test: an attempt to fight chromium's refresh rate decider
1 parent cf0328c commit 88b03b1

File tree

1 file changed

+35
-10
lines changed

1 file changed

+35
-10
lines changed

app/src/main/java/com/cafeed28/omori/OmoWebView.java

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import android.content.Context;
66
import android.content.SharedPreferences;
77
import android.content.res.AssetManager;
8+
import android.hardware.display.DisplayManager;
89
import android.net.Uri;
910
import android.util.AttributeSet;
1011
import android.util.Log;
@@ -55,9 +56,9 @@ public OmoWebView(Context context, @Nullable AttributeSet attrs, int defStyleAtt
5556
this(context, attrs, defStyleAttr, 0);
5657
}
5758

58-
private void setFrameRate(Window window, int frameRate) {
59-
Display display = window.getWindowManager().getDefaultDisplay();
59+
private void setFrameRate(Window window, Display display, int frameRate) {
6060
if (Math.floor(display.getRefreshRate()) == frameRate) {
61+
Debug.i().log(Log.INFO, "setFrameRate: already set");
6162
return;
6263
}
6364

@@ -86,13 +87,36 @@ private void setFrameRate(Window window, int frameRate) {
8687
var attributes = window.getAttributes();
8788
attributes.preferredRefreshRate = targetMode.getRefreshRate();
8889
window.setAttributes(attributes);
90+
} else {
91+
Debug.i().log(Log.WARN, "targetMode == null");
92+
Toast.makeText(getContext(), "Suitable display mode not found, view logs for details", Toast.LENGTH_LONG).show();
8993
}
9094
}
9195

9296
@SuppressLint("SetJavaScriptEnabled")
9397
public OmoWebView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
9498
super(context, attrs, defStyleAttr, defStyleRes);
9599

100+
DisplayManager displayManager = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
101+
displayManager.registerDisplayListener(new DisplayManager.DisplayListener() {
102+
@Override
103+
public void onDisplayAdded(int displayId) {}
104+
105+
@Override
106+
public void onDisplayRemoved(int displayId) {}
107+
108+
@Override
109+
public void onDisplayChanged(int displayId) {
110+
Debug.i().log(Log.INFO, "onDisplayChanged");
111+
Display display = displayManager.getDisplay(displayId);
112+
113+
Activity activity = (Activity) getContext();
114+
Window window = activity.getWindow();
115+
116+
setFrameRate(window, display, 60);
117+
}
118+
}, null);
119+
96120
OmoApplication application = (OmoApplication) context.getApplicationContext();
97121
SharedPreferences preferences = application.getPreferences();
98122

@@ -116,15 +140,16 @@ public OmoWebView(Context context, @Nullable AttributeSet attrs, int defStyleAtt
116140
settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
117141
settings.setLoadsImagesAutomatically(true);
118142
settings.setMediaPlaybackRequiresUserGesture(false);
143+
}
119144

120-
if (context instanceof Activity) {
121-
Activity activity = (Activity) context;
122-
Window window = activity.getWindow();
123-
setFrameRate(window, 60);
124-
} else {
125-
Debug.i().log(Log.ERROR, "failed to set frame rate, isAttachedToWindow() == false, how?");
126-
Toast.makeText(getContext(), "Failed to set frame rate, view logs for details", Toast.LENGTH_LONG).show();
127-
}
145+
@Override
146+
protected void onAttachedToWindow() {
147+
super.onAttachedToWindow();
148+
149+
Activity activity = (Activity) getContext();
150+
Window window = activity.getWindow();
151+
152+
setFrameRate(window, getDisplay(), 60);
128153
}
129154

130155
public void start() {

0 commit comments

Comments
 (0)