1f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik/* 2f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik * Copyright (C) 2013 The Android Open Source Project 3f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik * 4f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik * Licensed under the Apache License, Version 2.0 (the "License"); 5f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik * you may not use this file except in compliance with the License. 6f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik * You may obtain a copy of the License at 7f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik * 8f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik * http://www.apache.org/licenses/LICENSE-2.0 9f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik * 10f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik * Unless required by applicable law or agreed to in writing, software 11f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik * distributed under the License is distributed on an "AS IS" BASIS, 12f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik * See the License for the specific language governing permissions and 14f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik * limitations under the License. 15f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik */ 16f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik 17f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik#ifndef ANDROID_HWUI_TIMING_H 18f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik#define ANDROID_HWUI_TIMING_H 19f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik 20f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik#include <sys/time.h> 21f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik 22f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik#define TIME_METHOD() MethodTimer __method_timer(__func__) 23f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craikclass MethodTimer { 24f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craikpublic: 25f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik MethodTimer(const char* name) 26f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik : mMethodName(name) { 27d41c4d8c732095ae99c955b6b82f7306633004b1Chris Craik gettimeofday(&mStart, nullptr); 28f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik } 29f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik 30f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik ~MethodTimer() { 31f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik struct timeval stop; 32d41c4d8c732095ae99c955b6b82f7306633004b1Chris Craik gettimeofday(&stop, nullptr); 33f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik long long elapsed = (stop.tv_sec * 1000000) - (mStart.tv_sec * 1000000) 34f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik + (stop.tv_usec - mStart.tv_usec); 35f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik ALOGD("%s took %.2fms", mMethodName, elapsed / 1000.0); 36f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik } 37f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craikprivate: 38f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik const char* mMethodName; 39f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik struct timeval mStart; 40f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik}; 41f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik 42f2d8ccc15d7272b3416f73605c1f31d1d346bd40Chris Craik#endif 43