From 7f700bd2653173bd5bbad9228db4bbb8e3abca8d Mon Sep 17 00:00:00 2001 From: "HuYingzhuo(hugo/hyzboy)" Date: Fri, 28 Jul 2023 16:40:23 +0800 Subject: [PATCH] Added LoadSOC.cpp in SOCDataBase --- CMakeLists.txt | 30 ++---- android/AndroidDeviceAnalysis | 2 +- android/CMakeLists.txt | 45 +++++++++ android/SOCDataBase/LoadSOC.cpp | 160 ++++++++++++++++++++++++++++++++ android/SOCDataBase/db/SOC.csv | 71 ++++++++++++-- 5 files changed, 279 insertions(+), 29 deletions(-) create mode 100644 android/CMakeLists.txt create mode 100644 android/SOCDataBase/LoadSOC.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 87c5824..bb192cc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -90,26 +90,6 @@ cm_example_project("chart" DistributionChart2D) add_executable(TimeCount time/time_count.cpp) cm_example_project("time" TimeCount) -#################################################################################################### -SET(ADA_LOAD_SOURCE android/AndroidDeviceAnalysis/ParseDeviceID.cpp - android/AndroidDeviceAnalysis/ParseScreenSize.cpp - android/AndroidDeviceAnalysis/ParseDateTime.cpp - android/AndroidDeviceAnalysis/ParseAndroidVersion.cpp - android/AndroidDeviceAnalysis/ParseNumber.cpp - android/AndroidDeviceAnalysis/LoadRecordFile.cpp - android/AndroidDeviceAnalysis/EnumCSVFile.cpp -) - -source_group("Load" FILES ${ADA_LOAD_SOURCE}) - -add_executable(AndroidDeviceAnalysis android/AndroidDeviceAnalysis/main.cpp - android/AndroidDeviceAnalysis/GameRecord.h - android/AndroidDeviceAnalysis/GameRecord.cpp - android/AndroidDeviceAnalysis/AndroidDeviceRecord.cpp -# android/AndroidDeviceAnalysis/ExportReport.cpp - ${ADA_LOAD_SOURCE}) - -cm_example_project("android" AndroidDeviceAnalysis) #################################################################################################### @@ -120,4 +100,12 @@ add_executable(Base64Test utils/base64test.cpp) cm_example_project("utils" Base64Test) add_executable(HashTest utils/HashTest.cpp) -cm_example_project("utils" HashTest) \ No newline at end of file +cm_example_project("utils" HashTest) + +#################################################################################################### +OPTION(CM_EXAMPLES_ABOUT_ANDROID OFF) + +IF(CM_EXAMPLES_ABOUT_ANDROID) +add_subdirectory(android) +ENDIF() + diff --git a/android/AndroidDeviceAnalysis b/android/AndroidDeviceAnalysis index 6fe6a0a..b2f81e9 160000 --- a/android/AndroidDeviceAnalysis +++ b/android/AndroidDeviceAnalysis @@ -1 +1 @@ -Subproject commit 6fe6a0afdbc2b82df846f5137d3c61d811e11d05 +Subproject commit b2f81e97d414143457c262b6dcb5cfb77de1d0d8 diff --git a/android/CMakeLists.txt b/android/CMakeLists.txt new file mode 100644 index 0000000..bc10b6b --- /dev/null +++ b/android/CMakeLists.txt @@ -0,0 +1,45 @@ +macro(cm_android_project project_name) + target_link_libraries(${project_name} PRIVATE CMCore CMPlatform CMUtil) + + if(UNIX) + target_link_libraries(${project_name} PRIVATE dl) + endif() + + IF(WIN32) + target_link_libraries(${project_name} PRIVATE ${HGL_MATH_LIB}) + + set_debugger_directory(${project_name} ${CMAKE_CURRENT_SOURCE_DIR}) + + target_sources(${project_name} PRIVATE ${CM_MANIFEST}) + ENDIF() + + set_property(TARGET ${project_name} PROPERTY FOLDER "CM/Examples/android") +endmacro() + +#################################################################################################### +SET(LOAD_SOC_DB_SOURCE SOCDataBase/LoadSOC.cpp) + +add_library(SOCDataBase ${LOAD_SOC_DB_SOURCE}) + +cm_android_project(SOCDataBase) + +#################################################################################################### +SET(ADA_LOAD_GAME_RECORD_SOURCE AndroidDeviceAnalysis/ParseDeviceID.cpp + AndroidDeviceAnalysis/ParseScreenSize.cpp + AndroidDeviceAnalysis/ParseDateTime.cpp + AndroidDeviceAnalysis/ParseAndroidVersion.cpp + AndroidDeviceAnalysis/ParseNumber.cpp + AndroidDeviceAnalysis/LoadRecordFile.cpp + AndroidDeviceAnalysis/EnumCSVFile.cpp) + +source_group("Load GameRecord" FILES ${ADA_LOAD_GAME_RECORD_SOURCE}) + +add_executable(AndroidDeviceAnalysis AndroidDeviceAnalysis/main.cpp + AndroidDeviceAnalysis/GameRecord.h + AndroidDeviceAnalysis/GameRecord.cpp + AndroidDeviceAnalysis/AndroidDeviceRecord.cpp +# AndroidDeviceAnalysis/ExportReport.cpp + ${ADA_LOAD_GAME_RECORD_SOURCE}) + +cm_android_project(AndroidDeviceAnalysis) +target_link_libraries(AndroidDeviceAnalysis PRIVATE SOCDataBase) diff --git a/android/SOCDataBase/LoadSOC.cpp b/android/SOCDataBase/LoadSOC.cpp new file mode 100644 index 0000000..d258932 --- /dev/null +++ b/android/SOCDataBase/LoadSOC.cpp @@ -0,0 +1,160 @@ +#include +#include +#include +#include +#include + +using namespace hgl; +using namespace hgl::util; +using namespace hgl::filesystem; + +namespace +{ + Map soc_product_map; + + class SOCProductInfoParse:public CSVParseCallback + { + uint record_count=0; + uint parse_count=0; + uint valid_count=0; + + SOCProductInfo soc; + + public: + + ~SOCProductInfoParse() + { + std::cout<<"A total of "< &split) override + { + ++record_count; + + if(record_count<=2) //前2行是标题,跳过 + return(true); + + hgl_zero(soc); + + const char *p; + int len; + + { + p=split.next_field(&len); + if(!p) + return(false); + + soc.soc_info.vendor=ParseSOCVendor(p); + } + + { + p=split.next_field(&len); + if(!p) + return(false); + + hgl::strcpy(soc.soc_info.model,sizeof(soc.soc_info.model),p,len); + } + + { + p=split.next_field(&len); + if(!p) + return(false); + + hgl::strcpy(soc.product_name,sizeof(soc.product_name),p,len); + } + + { + p=split.next_field(&len); + if(!p) + return(false); + + //release time,discard + } + + { + p=split.next_field(&len); + if(!p) + return(false); + + soc.gpu_info.vendor=ParseSOCGPUVendor(p); + } + + { + p=split.next_field(&len); + if(!p) + return(false); + + hgl::strcpy(soc.gpu_info.model,sizeof(soc.gpu_info.model),p,len); + } + + { + p=split.next_field(&len); + if(!p) + return(false); + + hgl::stou(p,len,soc.gpu_info.core_count); + } + + { + p=split.next_field(&len); + if(!p) + return(false); + + hgl::stou(p,len,soc.gpu_info.freq); + } + + for(uint i=0;i<4;i++) + { + p=split.next_field(&len); + + if(len<=0) + { + split.next_field(&len); //skip core count + split.next_field(&len); //skip freq + + continue; + } + + hgl::strcpy(soc.cpu_cluster[soc.cpu_cluster_count].core,sizeof(soc.cpu_cluster[soc.cpu_cluster_count].core),p,len); + + p=split.next_field(&len); + if(!p) + return(false); + + hgl::stou(p,len,soc.cpu_cluster[soc.cpu_cluster_count].count); + + p=split.next_field(&len); + if(p) + hgl::stof(p,len,soc.cpu_cluster[soc.cpu_cluster_count].freq); + + ++soc.cpu_cluster_count; + } + + soc_product_map.Add(AnsiString(soc.soc_info.model),soc); + return(true); + } + };//class SOCProductInfoParse:public CSVParseCallback +}//namespace + +const SOCProductInfo *GetSOCProductInfo(const AnsiString &name) +{ + return soc_product_map.GetPointer(name); +} + +bool LoadSOCInfo(const OSString &path) +{ + const OSString filename=MergeFilename(path,OS_TEXT("SOC.csv")); + + if(!FileExist(filename)) + { + os_out<<"the file \""<