xref: /aosp_15_r20/external/intel-media-driver/media_softlet/agnostic/common/os/mos_os_next.cpp (revision ba62d9d3abf0e404f2022b4cd7a85e107f48596f)
1 /*
2 * Copyright (c) 2019, Intel Corporation
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included
12 * in all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSNextE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20 * OTHER DEALINGS IN THE SOFTWARE.
21 */
22 //! \file     mos_os_next.cpp
23 //! \brief    Unified OS Formats
24 //! \details  Unified OS Formats
25 //!
26 
27 #include "mos_os_next.h"
28 #include "mos_interface.h"
29 #include "mos_gpucontext_specific_next.h"
30 
31 #if MOS_COMMAND_RESINFO_DUMP_SUPPORTED
32 
33 std::shared_ptr<GpuCmdResInfoDumpNext> GpuCmdResInfoDumpNext::m_instance = nullptr;
34 
GetInstance(PMOS_CONTEXT mosCtx)35 const GpuCmdResInfoDumpNext *GpuCmdResInfoDumpNext::GetInstance(PMOS_CONTEXT mosCtx)
36 {
37     if (m_instance == nullptr)
38     {
39         m_instance = std::make_shared<GpuCmdResInfoDumpNext>(mosCtx);
40     }
41     return m_instance.get();
42 }
43 
GpuCmdResInfoDumpNext(PMOS_CONTEXT mosCtx)44 GpuCmdResInfoDumpNext::GpuCmdResInfoDumpNext(PMOS_CONTEXT mosCtx)
45 {
46     MediaUserSettingSharedPtr   userSettingPtr  = nullptr;
47     MediaUserSetting::Value     value;
48 
49     userSettingPtr = MosInterface::MosGetUserSettingInstance(mosCtx);
50 
51     ReadUserSetting(
52         userSettingPtr,
53         m_dumpEnabled,
54         __MEDIA_USER_FEATURE_VALUE_DUMP_COMMAND_INFO_ENABLE,
55         MediaUserSetting::Group::Device);
56 
57     if (!m_dumpEnabled)
58     {
59         return;
60     }
61 
62     ReadUserSetting(
63         userSettingPtr,
64         value,
65         __MEDIA_USER_FEATURE_VALUE_DUMP_COMMAND_INFO_PATH,
66         MediaUserSetting::Group::Device);
67 
68     auto path = value.ConstString();
69     if(path.size() > 0)
70     {
71         m_path = path;
72         if (path.back() != '/' && path.back() != '\\')
73         {
74             m_path += '/';
75         }
76     }
77     m_path = m_path + "gpuCmdResInfo_" + std::to_string(MosUtilities::MosGetPid()) + ".txt";
78 }
79 
Dump(PMOS_INTERFACE pOsInterface) const80 void GpuCmdResInfoDumpNext::Dump(PMOS_INTERFACE pOsInterface) const
81 {
82     if (!m_dumpEnabled)
83     {
84         return;
85     }
86 
87     using std::endl;
88 
89     std::ofstream outputFile;
90     outputFile.open(m_path, std::ios_base::app);
91     if(!outputFile.is_open())
92     {
93         MOS_OS_ASSERTMESSAGE("file open failed");
94         return;
95     }
96 
97     auto &cmdResInfoPtrs = GetCmdResPtrs(pOsInterface);
98 
99     outputFile << "--PerfTag: " << std::to_string(pOsInterface->pfnGetPerfTag(pOsInterface)) << " --Cmd Num: "
100         << cmdResInfoPtrs.size() << " --Dump Count: " << ++m_cnt << endl;
101 
102     outputFile << "********************************CMD Paket Begin********************************" << endl;
103     for (auto e : cmdResInfoPtrs)
104     {
105         Dump(e, outputFile);
106     }
107     outputFile << "********************************CMD Paket End**********************************" << endl << endl;
108 
109     outputFile.close();
110 }
111 
GetResType(MOS_GFXRES_TYPE resType) const112 const char *GpuCmdResInfoDumpNext::GetResType(MOS_GFXRES_TYPE resType) const
113 {
114     switch (resType)
115     {
116     case MOS_GFXRES_INVALID:
117         return "MOS_GFXRES_INVALID";
118     case MOS_GFXRES_BUFFER:
119         return "MOS_GFXRES_BUFFER";
120     case MOS_GFXRES_2D:
121         return "MOS_GFXRES_2D";
122     case MOS_GFXRES_VOLUME:
123         return "MOS_GFXRES_VOLUME";
124     default:
125         return "";
126     }
127 }
128 
GetTileType(MOS_TILE_TYPE tileType) const129 const char *GpuCmdResInfoDumpNext::GetTileType(MOS_TILE_TYPE tileType) const
130 {
131     switch (tileType)
132     {
133     case MOS_TILE_X:
134         return "MOS_TILE_X";
135     case MOS_TILE_Y:
136         return "MOS_TILE_Y";
137     case MOS_TILE_YF:
138         return "MOS_TILE_YF";
139     case MOS_TILE_YS:
140         return "MOS_TILE_YS";
141     case MOS_TILE_LINEAR:
142         return "MOS_TILE_LINEAR";
143     case MOS_TILE_INVALID:
144         return "MOS_TILE_INVALID";
145     default:
146         return "";
147     }
148 }
149 #endif // MOS_COMMAND_RESINFO_DUMP_SUPPORTED
150