Changeset View
Changeset View
Standalone View
Standalone View
ps/trunk/source/ps/ProfileViewer.cpp
Show First 20 Lines • Show All 496 Lines • ▼ Show 20 Lines | struct DumpTable | ||||
DumpTable(DumpTable && original) : | DumpTable(DumpTable && original) : | ||||
m_ScriptInterface(original.m_ScriptInterface), | m_ScriptInterface(original.m_ScriptInterface), | ||||
m_Root(original.m_ScriptInterface.GetJSRuntime(), original.m_Root.get()) | m_Root(original.m_ScriptInterface.GetJSRuntime(), original.m_Root.get()) | ||||
{ | { | ||||
} | } | ||||
void operator() (AbstractProfileTable* table) | void operator() (AbstractProfileTable* table) | ||||
{ | { | ||||
JSContext* cx = m_ScriptInterface.GetContext(); | ScriptInterface::Request rq(m_ScriptInterface); | ||||
JSAutoRequest rq(cx); | |||||
JS::RootedValue t(cx); | JS::RootedValue t(rq.cx); | ||||
ScriptInterface::CreateObject( | ScriptInterface::CreateObject( | ||||
cx, | rq, | ||||
&t, | &t, | ||||
"cols", DumpCols(table), | "cols", DumpCols(table), | ||||
"data", DumpRows(table)); | "data", DumpRows(table)); | ||||
m_ScriptInterface.SetProperty(m_Root, table->GetTitle().c_str(), t); | m_ScriptInterface.SetProperty(m_Root, table->GetTitle().c_str(), t); | ||||
} | } | ||||
std::vector<std::string> DumpCols(AbstractProfileTable* table) | std::vector<std::string> DumpCols(AbstractProfileTable* table) | ||||
{ | { | ||||
std::vector<std::string> titles; | std::vector<std::string> titles; | ||||
const std::vector<ProfileColumn>& columns = table->GetColumns(); | const std::vector<ProfileColumn>& columns = table->GetColumns(); | ||||
for (size_t c = 0; c < columns.size(); ++c) | for (size_t c = 0; c < columns.size(); ++c) | ||||
titles.push_back(columns[c].title); | titles.push_back(columns[c].title); | ||||
return titles; | return titles; | ||||
} | } | ||||
JS::Value DumpRows(AbstractProfileTable* table) | JS::Value DumpRows(AbstractProfileTable* table) | ||||
{ | { | ||||
JSContext* cx = m_ScriptInterface.GetContext(); | ScriptInterface::Request rq(m_ScriptInterface); | ||||
JSAutoRequest rq(cx); | |||||
JS::RootedValue data(cx); | JS::RootedValue data(rq.cx); | ||||
ScriptInterface::CreateObject(cx, &data); | ScriptInterface::CreateObject(rq, &data); | ||||
const std::vector<ProfileColumn>& columns = table->GetColumns(); | const std::vector<ProfileColumn>& columns = table->GetColumns(); | ||||
for (size_t r = 0; r < table->GetNumberRows(); ++r) | for (size_t r = 0; r < table->GetNumberRows(); ++r) | ||||
{ | { | ||||
JS::RootedValue row(cx); | JS::RootedValue row(rq.cx); | ||||
ScriptInterface::CreateArray(cx, &row); | ScriptInterface::CreateArray(rq, &row); | ||||
m_ScriptInterface.SetProperty(data, table->GetCellText(r, 0).c_str(), row); | m_ScriptInterface.SetProperty(data, table->GetCellText(r, 0).c_str(), row); | ||||
if (table->GetChild(r)) | if (table->GetChild(r)) | ||||
{ | { | ||||
JS::RootedValue childRows(cx, DumpRows(table->GetChild(r))); | JS::RootedValue childRows(rq.cx, DumpRows(table->GetChild(r))); | ||||
m_ScriptInterface.SetPropertyInt(row, 0, childRows); | m_ScriptInterface.SetPropertyInt(row, 0, childRows); | ||||
} | } | ||||
for (size_t c = 1; c < columns.size(); ++c) | for (size_t c = 1; c < columns.size(); ++c) | ||||
m_ScriptInterface.SetPropertyInt(row, c, table->GetCellText(r, c)); | m_ScriptInterface.SetPropertyInt(row, c, table->GetCellText(r, c)); | ||||
} | } | ||||
return data; | return data; | ||||
▲ Show 20 Lines • Show All 68 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator