1e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom/*
2e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom * Copyright (C) 2010 The Android Open Source Project
3e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom *
4e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom * Licensed under the Apache License, Version 2.0 (the "License");
5e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom * you may not use this file except in compliance with the License.
6e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom * You may obtain a copy of the License at
7e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom *
8e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom *      http://www.apache.org/licenses/LICENSE-2.0
9e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom *
10e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom * Unless required by applicable law or agreed to in writing, software
11e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom * distributed under the License is distributed on an "AS IS" BASIS,
12e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom * See the License for the specific language governing permissions and
14e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom * limitations under the License.
15e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom */
16e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom
17e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrompackage dalvik.system.profiler;
18e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom
19e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstromimport java.io.IOException;
20e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom
21e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom/**
22e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom * The {@code ThreadSampler} interfaces allows a profiler to choose
23e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom * between portable and VM specific implementations of thread
24e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom * sampling.
25e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom */
26e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrompublic interface ThreadSampler {
27e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom
28e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom    /**
29e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom     * Used to specify the maximum stack depth to collect.
30e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom     */
31e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom    public void setDepth(int depth);
32e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom
33e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom    /**
34e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom     * Return a stack trace for the current thread limited by the
35e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom     * maximum depth specified by {@link #setDepth setDepth}. May
36e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom     * return null if no sample is availble for the thread, which may
37e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom     * happen in cases such as thread termination. The resulting array
38e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom     * should be copied before the next call to {@code getStackTrace}
39e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom     * if the caller wants to use the results, since the {@code
40e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom     * ThreadSampler} may reuse the array. Note that the elements
41e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom     * themselves are immutable and do not need to be copied.
42e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom     */
43e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom    public StackTraceElement[] getStackTrace(Thread thread);
44e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom}
45