• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* //device/apps/Quake/quake/src/QW/client/main.c
2 **
3 ** Copyright 2007, The Android Open Source Project
4 **
5 ** Licensed under the Apache License, Version 2.0 (the "License");
6 ** you may not use this file except in compliance with the License.
7 ** You may obtain a copy of the License at
8 **
9 **     http://www.apache.org/licenses/LICENSE-2.0
10 **
11 ** Unless required by applicable law or agreed to in writing, software
12 ** distributed under the License is distributed on an "AS IS" BASIS,
13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 ** See the License for the specific language governing permissions and
15 ** limitations under the License.
16 */
17 
18 #include <stdio.h>
19 #include <assert.h>
20 
21 #define LOG_TAG "Quake"
22 
23 #include <GLES/gl.h>
24 #include <utils/Log.h>
25 #include <utils/Timers.h>
26 
27 #include <quakedef.h>
28 
29 // Timer utilities
30 
31 #define ENABLE_PMP
32 #define USE_LOG
33 
34 #ifdef ENABLE_PMP
35 
36 static nsecs_t baseTime;
37 static nsecs_t lastTime;
38 static const unsigned int kStartTimeStackSize = 100;
39 static nsecs_t startTimes[kStartTimeStackSize];
40 static unsigned int startTimeStackPointer;
41 
42 static
PMP_Common(const char * fmt,va_list ap,char type)43 void PMP_Common(const char* fmt, va_list ap, char type)
44 {
45 	char buf[1024];
46 	vsnprintf(buf, sizeof(buf), fmt, ap);
47 	va_end(ap);
48 
49 	// Note: Timer acually has less than microsecond resolution, so track time in microseconds:
50 
51 	nsecs_t time = systemTime(SYSTEM_TIME_THREAD) / 1000;
52 	if(baseTime == 0)
53 	{
54 		baseTime = time;
55 	}
56 	time -= baseTime;
57 	switch(type)
58 	{
59 	case '<':
60 		{
61 			if(startTimeStackPointer < kStartTimeStackSize)
62 			{
63 				startTimes[startTimeStackPointer] = time;
64 			}
65 #ifdef USE_LOG
66 			LOGI("< %lld [%d] %s\n", time, startTimeStackPointer, buf);
67 #else
68 			fprintf(stderr, "Quake < %lld %d %s\n", time, startTimeStackPointer, buf);
69 #endif
70 			startTimeStackPointer++;
71 		}
72 		break;
73 	case '>':
74 		{
75 			nsecs_t elapsed = 0;
76 			if(startTimeStackPointer > 0)
77 			{
78 				--startTimeStackPointer;
79 				if(startTimeStackPointer < kStartTimeStackSize)
80 				{
81 					elapsed = time - startTimes[startTimeStackPointer];
82 				}
83 			}
84 #ifdef USE_LOG
85 			LOGI("> %lld [%d] %lld %s\n", time, startTimeStackPointer, elapsed, buf);
86 #else
87 			fprintf(stderr, "Quake > %lld [%d] %lld %s\n", time, startTimeStackPointer, elapsed, buf);
88 #endif
89 		}
90 		break;
91 	default:
92 #ifdef USE_LOG
93 		LOGI("= %lld %lld %s\n", time, time - lastTime, buf);
94 #else
95 		fprintf(stderr, "Quake = %lld %s\n", time, buf);
96 #endif
97 		break;
98 	}
99 	lastTime = time;
100 }
101 
PMP_Begin(const char * fmt,...)102 void PMP_Begin(const char* fmt,...)
103 {
104 	va_list ap;
105 	va_start(ap, fmt);
106 	PMP_Common(fmt, ap, '<');
107 }
108 
PMP_Event(const char * fmt,...)109 void PMP_Event(const char* fmt,...)
110 {
111 	va_list ap;
112 	va_start(ap, fmt);
113 	PMP_Common(fmt, ap, '=');
114 }
115 
PMP_End(const char * fmt,...)116 void PMP_End(const char* fmt,...)
117 {
118 	va_list ap;
119 	va_start(ap, fmt);
120 	PMP_Common(fmt, ap, '>');
121 }
122 
123 #endif // ENABLE_PMP
124