summaryrefslogtreecommitdiff
path: root/core/java/android/webkit/WebViewClassic.java
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2012-06-14 10:00:31 -0700
committerJohn Reck <jreck@google.com>2012-06-14 14:01:20 -0700
commit926cf56676d760579573470c7848dbf119a86779 (patch)
treebdcb7c27462efd0897d144390e1fc83290d6b979 /core/java/android/webkit/WebViewClassic.java
parenteb859df3f97afa84db85c18bda9c125071dc8747 (diff)
Show WebView layers in hierarchyviewer
Change-Id: I373e084d236baafe17982cfc367d167b81ca3e20
Diffstat (limited to 'core/java/android/webkit/WebViewClassic.java')
-rw-r--r--core/java/android/webkit/WebViewClassic.java53
1 files changed, 53 insertions, 0 deletions
diff --git a/core/java/android/webkit/WebViewClassic.java b/core/java/android/webkit/WebViewClassic.java
index e456a64354d5..d1a744f06f33 100644
--- a/core/java/android/webkit/WebViewClassic.java
+++ b/core/java/android/webkit/WebViewClassic.java
@@ -117,6 +117,8 @@ import android.widget.Toast;
import junit.framework.Assert;
+import java.io.BufferedWriter;
+import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
@@ -132,6 +134,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Vector;
+import java.util.concurrent.CountDownLatch;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -8594,6 +8597,54 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
WebViewCore.setShouldMonitorWebCoreThread();
}
+ @Override
+ public void dumpViewHierarchyWithProperties(BufferedWriter out, int level) {
+ int layer = getBaseLayer();
+ if (layer != 0) {
+ try {
+ ByteArrayOutputStream stream = new ByteArrayOutputStream();
+ ViewStateSerializer.dumpLayerHierarchy(layer, stream, level);
+ stream.close();
+ byte[] buf = stream.toByteArray();
+ out.write(new String(buf, "ascii"));
+ } catch (IOException e) {}
+ }
+ }
+
+ @Override
+ public View findHierarchyView(String className, int hashCode) {
+ if (mNativeClass == 0) return null;
+ Picture pic = new Picture();
+ if (!nativeDumpLayerContentToPicture(mNativeClass, className, hashCode, pic)) {
+ return null;
+ }
+ return new PictureWrapperView(getContext(), pic, mWebView);
+ }
+
+ private static class PictureWrapperView extends View {
+ Picture mPicture;
+ WebView mWebView;
+
+ public PictureWrapperView(Context context, Picture picture, WebView parent) {
+ super(context);
+ mPicture = picture;
+ mWebView = parent;
+ setWillNotDraw(false);
+ setRight(mPicture.getWidth());
+ setBottom(mPicture.getHeight());
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ canvas.drawPicture(mPicture);
+ }
+
+ @Override
+ public boolean post(Runnable action) {
+ return mWebView.post(action);
+ }
+ }
+
private native void nativeCreate(int ptr, String drawableDir, boolean isHighEndGfx);
private native void nativeDebugDump();
private static native void nativeDestroy(int ptr);
@@ -8614,6 +8665,8 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
int scrollingLayer);
private native int nativeGetBaseLayer(int nativeInstance);
private native void nativeCopyBaseContentToPicture(Picture pict);
+ private native boolean nativeDumpLayerContentToPicture(int nativeInstance,
+ String className, int layerId, Picture pict);
private native boolean nativeHasContent();
private native void nativeStopGL(int ptr);
private native void nativeDiscardAllTextures();