1b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson/*
2b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * Copyright (C) 2011 The Android Open Source Project
3b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson *
4b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * Licensed under the Apache License, Version 2.0 (the "License");
5b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * you may not use this file except in compliance with the License.
6b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * You may obtain a copy of the License at
7b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson *
8b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson *      http://www.apache.org/licenses/LICENSE-2.0
9b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson *
10b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * Unless required by applicable law or agreed to in writing, software
11b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * distributed under the License is distributed on an "AS IS" BASIS,
12b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * See the License for the specific language governing permissions and
14b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * limitations under the License.
15b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson */
16b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson
17b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson#ifndef FRAMEWORKS_EX_VARIABLESPEED_JNI_PROFILE_TIMER_H_
18b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson#define FRAMEWORKS_EX_VARIABLESPEED_JNI_PROFILE_TIMER_H_
19b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson
20b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson#include <hlogging.h>
21b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson#include <time.h>
22b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson
23b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson#include <string>
24b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson
25b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson// Simple profiler for debugging method call duration.
26b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudsonclass Timer {
27b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public:
28b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson  Timer() : startTime_(clock()) {
29b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson  }
30b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson
31b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson  virtual ~Timer() {
32b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson    PrintElapsed("destructor");
33b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson  }
34b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson
35b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson  void PrintElapsed(const char* message) {
36b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson    clock_t endTime(clock());
37b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson    LOGD("Timer(%s): %d ms", message,
38b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson        static_cast<int>((endTime - startTime_) * 1000 / CLOCKS_PER_SEC));
39b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson  }
40b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson
41b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson  size_t GetElapsed() {
42b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson    clock_t endTime(clock());
43b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson    return (endTime - startTime_) * 1000 / CLOCKS_PER_SEC;
44b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson  }
45b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson
46b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson private:
47b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson  clock_t startTime_;
48b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson
49b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson  DISALLOW_COPY_AND_ASSIGN(Timer);
50b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson};
51b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson
52b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson#endif  // FRAMEWORKS_EX_VARIABLESPEED_JNI_PROFILE_TIMER_H_
53