diff options
author | Jeff Hao <jeffhao@google.com> | 2014-09-08 09:38:18 -0700 |
---|---|---|
committer | Jeff Hao <jeffhao@google.com> | 2014-09-09 11:39:38 -0700 |
commit | d063d912e5580222b1822b152de315420cef49ee (patch) | |
tree | 98399fb92eaeefab47daf6ce9b77f03ffb8841d8 /test/099-vmdebug/src/Main.java | |
parent | 5bc47ebe278af65e8e2a2d6b603ac94a020285f7 (diff) | |
download | art-d063d912e5580222b1822b152de315420cef49ee.zip art-d063d912e5580222b1822b152de315420cef49ee.tar.gz art-d063d912e5580222b1822b152de315420cef49ee.tar.bz2 |
Change when sampling thread is reset during shutdown to prevent races.
Also adds some extra argument checking and testing for tracing.
Bug: 17412385
(cherry picked from commit f8bdd4e783842577e49f418a0b5962ba49dfdd93)
Change-Id: Ifc4f1a296155d73255b29d264b5475024e6419da
Diffstat (limited to 'test/099-vmdebug/src/Main.java')
-rw-r--r-- | test/099-vmdebug/src/Main.java | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/test/099-vmdebug/src/Main.java b/test/099-vmdebug/src/Main.java new file mode 100644 index 0000000..d51ec6e --- /dev/null +++ b/test/099-vmdebug/src/Main.java @@ -0,0 +1,130 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Method; + +public class Main { + public static void main(String[] args) throws Exception { + String name = System.getProperty("java.vm.name"); + if (!"Dalvik".equals(name)) { + System.out.println("This test is not supported on " + name); + return; + } + testMethodTracing(); + } + + private static void testMethodTracing() throws Exception { + String tempFileName; + if (new File("/tmp").isDirectory()) { + tempFileName = "/tmp/test.trace"; + } else if (new File("/sdcard").isDirectory()) { + tempFileName = "/sdcard/test.trace"; + } else { + System.out.println("Can't find proper output directory for trace file"); + return; + } + File tempFile = new File(tempFileName); + tempFile.delete(); + + System.out.println("Confirm enable/disable"); + System.out.println("status=" + VMDebug.getMethodTracingMode()); + VMDebug.startMethodTracing(tempFileName, 0, 0, false, 0); + System.out.println("status=" + VMDebug.getMethodTracingMode()); + VMDebug.stopMethodTracing(); + System.out.println("status=" + VMDebug.getMethodTracingMode()); + if (tempFile.length() == 0) { + System.out.println("ERROR: tracing output file is empty"); + } + + System.out.println("Confirm sampling"); + VMDebug.startMethodTracing(tempFileName, 0, 0, true, 1000); + System.out.println("status=" + VMDebug.getMethodTracingMode()); + VMDebug.stopMethodTracing(); + System.out.println("status=" + VMDebug.getMethodTracingMode()); + if (tempFile.length() == 0) { + System.out.println("ERROR: sample tracing output file is empty"); + } + + System.out.println("Test starting when already started"); + VMDebug.startMethodTracing(tempFileName, 0, 0, false, 0); + System.out.println("status=" + VMDebug.getMethodTracingMode()); + VMDebug.startMethodTracing(tempFileName, 0, 0, false, 0); + System.out.println("status=" + VMDebug.getMethodTracingMode()); + + System.out.println("Test stopping when already stopped"); + VMDebug.stopMethodTracing(); + System.out.println("status=" + VMDebug.getMethodTracingMode()); + VMDebug.stopMethodTracing(); + System.out.println("status=" + VMDebug.getMethodTracingMode()); + + System.out.println("Test tracing with empty filename"); + try { + VMDebug.startMethodTracing("", 0, 0, false, 0); + System.out.println("Should have thrown an exception"); + } catch (Exception e) { + System.out.println("Got expected exception"); + } + + System.out.println("Test tracing with bogus (< 1024 && != 0) filesize"); + try { + VMDebug.startMethodTracing(tempFileName, 1000, 0, false, 0); + System.out.println("Should have thrown an exception"); + } catch (Exception e) { + System.out.println("Got expected exception"); + } + + System.out.println("Test sampling with bogus (<= 0) interval"); + try { + VMDebug.startMethodTracing(tempFileName, 0, 0, true, 0); + System.out.println("Should have thrown an exception"); + } catch (Exception e) { + System.out.println("Got expected exception"); + } + + tempFile.delete(); + } + + private static class VMDebug { + private static final Method startMethodTracingMethod; + private static final Method stopMethodTracingMethod; + private static final Method getMethodTracingModeMethod; + static { + try { + Class c = Class.forName("dalvik.system.VMDebug"); + startMethodTracingMethod = c.getDeclaredMethod("startMethodTracing", String.class, + Integer.TYPE, Integer.TYPE, Boolean.TYPE, Integer.TYPE); + stopMethodTracingMethod = c.getDeclaredMethod("stopMethodTracing"); + getMethodTracingModeMethod = c.getDeclaredMethod("getMethodTracingMode"); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public static void startMethodTracing(String filename, int bufferSize, int flags, + boolean samplingEnabled, int intervalUs) throws Exception { + startMethodTracingMethod.invoke(null, filename, bufferSize, flags, samplingEnabled, + intervalUs); + } + public static void stopMethodTracing() throws Exception { + stopMethodTracingMethod.invoke(null); + } + public static int getMethodTracingMode() throws Exception { + return (int) getMethodTracingModeMethod.invoke(null); + } + } +} |