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