Search in sources :

Example 51 with Chunk

use of org.apache.harmony.dalvik.ddmc.Chunk in project android_frameworks_base by crdroidandroid.

the class DdmHandleViewDebug method profileView.

/** Profiles provided view. */
private Chunk profileView(View rootView, final View targetView) {
    ByteArrayOutputStream b = new ByteArrayOutputStream(32 * 1024);
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(b), 32 * 1024);
    try {
        ViewDebug.profileViewAndChildren(targetView, bw);
    } catch (IOException e) {
        return createFailChunk(1, "Unexpected error while profiling view: " + e.getMessage());
    } finally {
        try {
            bw.close();
        } catch (IOException e) {
        // ignore
        }
    }
    byte[] data = b.toByteArray();
    return new Chunk(CHUNK_VUOP, data, 0, data.length);
}
Also used : OutputStreamWriter(java.io.OutputStreamWriter) ByteArrayOutputStream(java.io.ByteArrayOutputStream) IOException(java.io.IOException) Chunk(org.apache.harmony.dalvik.ddmc.Chunk) BufferedWriter(java.io.BufferedWriter)

Example 52 with Chunk

use of org.apache.harmony.dalvik.ddmc.Chunk in project android_frameworks_base by AOSPA.

the class DdmHandleHeap method handleHPDU.

/*
     * Handle a "HeaP DUmp" request.
     *
     * This currently just returns a result code.  We could pull up
     * the entire contents of the file and return them, but hprof dump
     * files can be a few megabytes.
     */
private Chunk handleHPDU(Chunk request) {
    ByteBuffer in = wrapChunk(request);
    byte result;
    /* get the filename for the output file */
    int len = in.getInt();
    String fileName = getString(in, len);
    if (false)
        Log.d("ddm-heap", "Heap dump: file='" + fileName + "'");
    try {
        Debug.dumpHprofData(fileName);
        result = 0;
    } catch (UnsupportedOperationException uoe) {
        Log.w("ddm-heap", "hprof dumps not supported in this VM");
        result = -1;
    } catch (IOException ioe) {
        result = -1;
    } catch (RuntimeException re) {
        result = -1;
    }
    /* create a non-empty reply so the handler fires on completion */
    byte[] reply = { result };
    return new Chunk(CHUNK_HPDU, reply, 0, reply.length);
}
Also used : IOException(java.io.IOException) Chunk(org.apache.harmony.dalvik.ddmc.Chunk) ByteBuffer(java.nio.ByteBuffer)

Example 53 with Chunk

use of org.apache.harmony.dalvik.ddmc.Chunk in project android_frameworks_base by DirtyUnicorns.

the class DdmHandleThread method createStackChunk.

/*
     * Serialize a StackTraceElement[] into an STKL chunk.
     *
     * We include the threadId in the response so the other side doesn't have
     * to match up requests and responses as carefully.
     */
private Chunk createStackChunk(StackTraceElement[] trace, int threadId) {
    int bufferSize = 0;
    // version, flags, whatever
    bufferSize += 4;
    // thread ID
    bufferSize += 4;
    // frame count
    bufferSize += 4;
    for (StackTraceElement elem : trace) {
        bufferSize += 4 + elem.getClassName().length() * 2;
        bufferSize += 4 + elem.getMethodName().length() * 2;
        bufferSize += 4;
        if (elem.getFileName() != null)
            bufferSize += elem.getFileName().length() * 2;
        // line number
        bufferSize += 4;
    }
    ByteBuffer out = ByteBuffer.allocate(bufferSize);
    out.putInt(0);
    out.putInt(threadId);
    out.putInt(trace.length);
    for (StackTraceElement elem : trace) {
        out.putInt(elem.getClassName().length());
        putString(out, elem.getClassName());
        out.putInt(elem.getMethodName().length());
        putString(out, elem.getMethodName());
        if (elem.getFileName() != null) {
            out.putInt(elem.getFileName().length());
            putString(out, elem.getFileName());
        } else {
            out.putInt(0);
        }
        out.putInt(elem.getLineNumber());
    }
    return new Chunk(CHUNK_STKL, out);
}
Also used : Chunk(org.apache.harmony.dalvik.ddmc.Chunk) ByteBuffer(java.nio.ByteBuffer)

Example 54 with Chunk

use of org.apache.harmony.dalvik.ddmc.Chunk in project android_frameworks_base by DirtyUnicorns.

the class DdmHandleViewDebug method dumpHierarchy.

/**
     * Returns the view hierarchy and/or view properties starting at the provided view.
     * Based on the input options, the return data may include:
     *  - just the view hierarchy
     *  - view hierarchy & the properties for each of the views
     *  - just the view properties for a specific view.
     *  TODO: Currently this only returns views starting at the root, need to fix so that
     *  it can return properties of any view.
     */
private Chunk dumpHierarchy(View rootView, ByteBuffer in) {
    boolean skipChildren = in.getInt() > 0;
    boolean includeProperties = in.getInt() > 0;
    boolean v2 = in.hasRemaining() && in.getInt() > 0;
    long start = System.currentTimeMillis();
    ByteArrayOutputStream b = new ByteArrayOutputStream(2 * 1024 * 1024);
    try {
        if (v2) {
            ViewDebug.dumpv2(rootView, b);
        } else {
            ViewDebug.dump(rootView, skipChildren, includeProperties, b);
        }
    } catch (IOException | InterruptedException e) {
        return createFailChunk(1, "Unexpected error while obtaining view hierarchy: " + e.getMessage());
    }
    long end = System.currentTimeMillis();
    Log.d(TAG, "Time to obtain view hierarchy (ms): " + (end - start));
    byte[] data = b.toByteArray();
    return new Chunk(CHUNK_VURT, data, 0, data.length);
}
Also used : ByteArrayOutputStream(java.io.ByteArrayOutputStream) IOException(java.io.IOException) Chunk(org.apache.harmony.dalvik.ddmc.Chunk)

Example 55 with Chunk

use of org.apache.harmony.dalvik.ddmc.Chunk in project android_frameworks_base by DirtyUnicorns.

the class DdmHandleViewDebug method listWindows.

/** Returns the list of windows owned by this client. */
private Chunk listWindows() {
    String[] windowNames = WindowManagerGlobal.getInstance().getViewRootNames();
    // # of windows
    int responseLength = 4;
    for (String name : windowNames) {
        // length of next window name
        responseLength += 4;
        // window name
        responseLength += name.length() * 2;
    }
    ByteBuffer out = ByteBuffer.allocate(responseLength);
    out.order(ChunkHandler.CHUNK_ORDER);
    out.putInt(windowNames.length);
    for (String name : windowNames) {
        out.putInt(name.length());
        putString(out, name);
    }
    return new Chunk(CHUNK_VULW, out);
}
Also used : Chunk(org.apache.harmony.dalvik.ddmc.Chunk) ByteBuffer(java.nio.ByteBuffer)

Aggregations

Chunk (org.apache.harmony.dalvik.ddmc.Chunk)98 ByteBuffer (java.nio.ByteBuffer)48 IOException (java.io.IOException)36 ByteArrayOutputStream (java.io.ByteArrayOutputStream)29 BufferedWriter (java.io.BufferedWriter)6 DataOutputStream (java.io.DataOutputStream)6 OutputStreamWriter (java.io.OutputStreamWriter)6 VMRuntime (dalvik.system.VMRuntime)5