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