1 /** 2 * Copyright (c) 2019, The Linux Foundation. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are 6 * met: 7 * * Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * * Redistributions in binary form must reproduce the above 10 * copyright notice, this list of conditions and the following 11 * disclaimer in the documentation and/or other materials provided 12 * with the distribution. 13 * * Neither the name of The Linux Foundation nor the names of its 14 * contributors may be used to endorse or promote products derived 15 * from this software without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 18 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 20 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 21 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 24 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 25 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 26 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 */ 29 30 #ifndef _ADSP_PERF_H 31 #define _ADSP_PERF_H 32 #include "AEEStdDef.h" 33 #ifndef __QAIC_HEADER 34 #define __QAIC_HEADER(ff) ff 35 #endif //__QAIC_HEADER 36 37 #ifndef __QAIC_HEADER_EXPORT 38 #define __QAIC_HEADER_EXPORT 39 #endif // __QAIC_HEADER_EXPORT 40 41 #ifndef __QAIC_HEADER_ATTRIBUTE 42 #define __QAIC_HEADER_ATTRIBUTE 43 #endif // __QAIC_HEADER_ATTRIBUTE 44 45 #ifndef __QAIC_IMPL 46 #define __QAIC_IMPL(ff) ff 47 #endif //__QAIC_IMPL 48 49 #ifndef __QAIC_IMPL_EXPORT 50 #define __QAIC_IMPL_EXPORT 51 #endif // __QAIC_IMPL_EXPORT 52 53 #ifndef __QAIC_IMPL_ATTRIBUTE 54 #define __QAIC_IMPL_ATTRIBUTE 55 #endif // __QAIC_IMPL_ATTRIBUTE 56 #ifdef __cplusplus 57 extern "C" { 58 #endif 59 /** 60 * Interface for querying the adsp for counter data 61 * For example, to enable all the perf numbers: 62 * 63 * int perf_on(void) { 64 * int nErr = 0; 65 * int numKeys = 0, maxLen = 0, ii; 66 * char keys[512]; 67 * char* buf = &keys[0]; 68 * VERIFY(0 == adsp_perf_get_keys(keys, 512, &maxLen, &numKeys)); 69 * assert(maxLen < 512); 70 * for(ii = 0; ii < numKeys; ++ii) { 71 * char* name = buf; 72 * buf += strlen(name) + 1; 73 * printf("perf on: %s\n", name); 74 * VERIFY(0 == adsp_perf_enable(ii)); 75 * } 76 * bail: 77 * return nErr; 78 * } 79 * 80 * To read all the results: 81 * 82 * int rpcperf_perf_result(void) { 83 * int nErr = 0; 84 * int numKeys, maxLen, ii; 85 * char keys[512]; 86 * char* buf = &keys[0]; 87 * long long usecs[16]; 88 * VERIFY(0 == adsp_perf_get_keys(keys, 512, &maxLen, &numKeys)); 89 * printf("perf keys: %d\n", numKeys); 90 * VERIFY(0 == adsp_perf_get_usecs(usecs, 16)); 91 * assert(maxLen < 512); 92 * assert(numKeys < 16); 93 * for(ii = 0; ii < numKeys; ++ii) { 94 * char* name = buf; 95 * buf += strlen(name) + 1; 96 * printf("perf result: %s %lld\n", name, usecs[ii]); 97 * } 98 * bail: 99 * return nErr; 100 * } 101 */ 102 #define _const_adsp_perf_handle 6 103 __QAIC_HEADER_EXPORT int __QAIC_HEADER(adsp_perf_enable)(int ix) __QAIC_HEADER_ATTRIBUTE; 104 __QAIC_HEADER_EXPORT int __QAIC_HEADER(adsp_perf_get_usecs)(int64* dst, int dstLen) __QAIC_HEADER_ATTRIBUTE; 105 __QAIC_HEADER_EXPORT int __QAIC_HEADER(adsp_perf_get_keys)(char* keys, int keysLen, int* maxLen, int* numKeys) __QAIC_HEADER_ATTRIBUTE; 106 #ifdef __cplusplus 107 } 108 #endif 109 #endif //_ADSP_PERF_H 110