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.util.Arrays;
20e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom
21e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom/**
22e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom * ThreadSampler implementation that only uses Thread.getStackTrace()
23e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom * and therefore is portable.
24e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom */
25e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstromclass PortableThreadSampler implements ThreadSampler {
26e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom
27e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom    private int depth;
28e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom
29e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom    @Override public void setDepth(int depth) {
30e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom        this.depth = depth;
31e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom    }
32e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom
33e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom    @Override public StackTraceElement[] getStackTrace(Thread thread) {
34e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom        StackTraceElement[] stackFrames = thread.getStackTrace();
35e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom        if (stackFrames.length == 0) {
36e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom            return null;
37e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom        }
38e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom        if (stackFrames.length > depth) {
39e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom            stackFrames = Arrays.copyOfRange(stackFrames, 0, depth);
40e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom        }
41e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom        return stackFrames;
42e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom    }
43e9af8901fc4ed7c05d085e2e492f5dcc857f0146Brian Carlstrom}
44