145aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project/*
245aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project * Copyright (C) 2009 The Android Open Source Project
345aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project *
445aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
545aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project * you may not use this file except in compliance with the License.
645aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project * You may obtain a copy of the License at
745aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project *
845aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
945aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project *
1045aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1145aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1245aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1345aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project * See the License for the specific language governing permissions and
1445aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project * limitations under the License.
1545aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project */
1645aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project
1745aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Projectpackage com.android.hierarchyviewer.scene;
1845aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project
195542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohetimport com.android.ddmlib.IDevice;
20cfa3a826f5924552889c750e6abb28d73b6d0597Romain Guyimport com.android.hierarchyviewer.HierarchyViewer;
2145aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Projectimport com.android.hierarchyviewer.device.Window;
2245aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Projectimport com.android.hierarchyviewer.device.DeviceBridge;
2345aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project
2445aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Projectimport java.net.Socket;
2545aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Projectimport java.net.InetSocketAddress;
2645aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Projectimport java.io.BufferedWriter;
2745aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Projectimport java.io.OutputStreamWriter;
2845aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Projectimport java.io.IOException;
2945aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Projectimport java.io.BufferedReader;
3045aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Projectimport java.io.InputStreamReader;
3145aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project
3245aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Projectpublic class ProfilesLoader {
335542fe492293223a81e604a49aa6fa55b1719847Xavier Ducrohet    public static double[] loadProfiles(IDevice device, Window window, String params) {
34cfa3a826f5924552889c750e6abb28d73b6d0597Romain Guy        if (!HierarchyViewer.isProfilingEnabled()) {
35cfa3a826f5924552889c750e6abb28d73b6d0597Romain Guy            return new double[] { 0.0, 0.0, 0.0 };
36cfa3a826f5924552889c750e6abb28d73b6d0597Romain Guy        }
37cfa3a826f5924552889c750e6abb28d73b6d0597Romain Guy
3845aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project        Socket socket = null;
3945aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project        BufferedReader in = null;
4045aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project        BufferedWriter out = null;
4145aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project
4245aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project        try {
4345aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project            socket = new Socket();
4445aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project            socket.connect(new InetSocketAddress("127.0.0.1",
4545aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project                    DeviceBridge.getDeviceLocalPort(device)));
4645aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project
4745aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project            out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
4845aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
4945aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project
5045aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project            out.write("PROFILE " + window.encode() + " " + params);
5145aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project            out.newLine();
5245aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project            out.flush();
5345aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project
5445aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project            String response = in.readLine();
5545aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project            String[] data = response.split(" ");
5645aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project
5745aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project            double[] profiles = new double[data.length];
5845aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project            for (int i = 0; i < data.length; i++) {
5945aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project                profiles[i] = (Long.parseLong(data[i]) / 1000.0) / 1000.0; // convert to ms
6045aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project            }
6145aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project            return profiles;
6245aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project        } catch (IOException e) {
6345aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project            // Empty
6445aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project        } finally {
6545aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project            try {
6645aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project                if (out != null) {
6745aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project                    out.close();
6845aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project                }
6945aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project                if (in != null) {
7045aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project                    in.close();
7145aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project                }
7245aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project                if (socket != null) {
7345aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project                    socket.close();
7445aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project                }
7545aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project            } catch (IOException ex) {
7645aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project                ex.printStackTrace();
7745aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project            }
7845aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project        }
7945aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project
8045aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project        return null;
8145aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project    }
8245aacc49a96e083eb68cda88ed0f7e262b7254d1The Android Open Source Project}
83