1 /* 2 * Copyright (C) 2018 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5 * use this file except in compliance with the License. You may obtain a copy of 6 * the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 * License for the specific language governing permissions and limitations under 14 * the License. 15 */ 16 17 package com.android.frameworks.perftests.am.util; 18 19 import android.content.Intent; 20 import android.os.RemoteException; 21 import android.os.ResultReceiver; 22 import android.support.test.InstrumentationRegistry; 23 import android.support.test.uiautomator.UiDevice; 24 import android.util.Log; 25 26 import java.io.IOException; 27 28 public class Utils { 29 private static final String TAG = "AmPerfTestsUtils"; 30 31 public static void drainBroadcastQueue() { 32 runShellCommand("am wait-for-broadcast-idle"); 33 } 34 35 /** 36 * Runs the command and returns the stdout. 37 */ 38 public static String runShellCommand(String cmd) { 39 try { 40 return UiDevice.getInstance( 41 InstrumentationRegistry.getInstrumentation()).executeShellCommand(cmd); 42 } catch (IOException e) { 43 throw new RuntimeException(e); 44 } 45 } 46 47 /** 48 * Sends the current time in a message with the given type so TimeReceiver can receive it. 49 */ 50 public static void sendTime(Intent intent, String type) { 51 final long time = System.nanoTime(); 52 final ITimeReceiverCallback sendTimeBinder = ITimeReceiverCallback.Stub.asInterface( 53 intent.getExtras().getBinder(Constants.EXTRA_RECEIVER_CALLBACK)); 54 try { 55 sendTimeBinder.sendTime(type, time); 56 } catch (RemoteException e) { 57 Log.e(TAG, e.getMessage()); 58 } 59 } 60 61 /** 62 * Notify the listener that the main Looper queue is idle. 63 */ 64 public static void sendLooperIdle(Intent intent) { 65 ResultReceiver resultReceiver = intent.getParcelableExtra(Intent.EXTRA_RESULT_RECEIVER); 66 resultReceiver.send(0, null); 67 } 68 } 69