Bug 1337189 (part 24) - Move RegisterThread() out of Sampler and rename it. r=mstange.

The new name is MaybeSetProfile(), which better reflects what it does.
This commit is contained in:
Nicholas Nethercote 2017-02-09 15:40:12 +11:00
Родитель 78a76af493
Коммит f7e99d0285
3 изменённых файлов: 37 добавлений и 47 удалений

Просмотреть файл

@ -170,7 +170,7 @@ Sampler::Sampler()
for (uint32_t i = 0; i < sRegisteredThreads->size(); i++) {
ThreadInfo* info = sRegisteredThreads->at(i);
RegisterThread(info);
MaybeSetProfile(info);
}
}
@ -530,42 +530,3 @@ void PseudoStack::flushSamplerOnJSShutdown()
// END SaveProfileTask et al
////////////////////////////////////////////////////////////////////////
static bool
ThreadSelected(const char* aThreadName)
{
StaticMutexAutoLock lock(gThreadNameFiltersMutex);
if (gThreadNameFilters.empty()) {
return true;
}
std::string name = aThreadName;
std::transform(name.begin(), name.end(), name.begin(), ::tolower);
for (uint32_t i = 0; i < gThreadNameFilters.length(); ++i) {
std::string filter = gThreadNameFilters[i];
std::transform(filter.begin(), filter.end(), filter.begin(), ::tolower);
// Crude, non UTF-8 compatible, case insensitive substring search
if (name.find(filter) != std::string::npos) {
return true;
}
}
return false;
}
void
Sampler::RegisterThread(ThreadInfo* aInfo)
{
if (!aInfo->IsMainThread() && !gProfileThreads) {
return;
}
if (!ThreadSelected(aInfo->Name())) {
return;
}
aInfo->SetProfile(gBuffer);
}

Просмотреть файл

@ -1167,6 +1167,40 @@ GeckoProfilerReporter::CollectReports(nsIHandleReportCallback* aHandleReport,
NS_IMPL_ISUPPORTS(GeckoProfilerReporter, nsIMemoryReporter)
static bool
ThreadSelected(const char* aThreadName)
{
StaticMutexAutoLock lock(gThreadNameFiltersMutex);
if (gThreadNameFilters.empty()) {
return true;
}
std::string name = aThreadName;
std::transform(name.begin(), name.end(), name.begin(), ::tolower);
for (uint32_t i = 0; i < gThreadNameFilters.length(); ++i) {
std::string filter = gThreadNameFilters[i];
std::transform(filter.begin(), filter.end(), filter.begin(), ::tolower);
// Crude, non UTF-8 compatible, case insensitive substring search
if (name.find(filter) != std::string::npos) {
return true;
}
}
return false;
}
static void
MaybeSetProfile(ThreadInfo* aInfo)
{
if ((aInfo->IsMainThread() || gProfileThreads) &&
ThreadSelected(aInfo->Name())) {
aInfo->SetProfile(gBuffer);
}
}
static void
RegisterCurrentThread(const char* aName, PseudoStack* aPseudoStack,
bool aIsMainThread, void* stackTop)
@ -1192,10 +1226,7 @@ RegisterCurrentThread(const char* aName, PseudoStack* aPseudoStack,
ThreadInfo* info =
new ThreadInfo(aName, id, aIsMainThread, aPseudoStack, stackTop);
// XXX: this is an off-main-thread use of gSampler
if (gSampler) {
gSampler->RegisterThread(info);
}
MaybeSetProfile(info);
sRegisteredThreads->push_back(info);
}
@ -1586,7 +1617,7 @@ profiler_start(int aProfileEntries, double aInterval,
profiler_stop();
// Deep copy aThreadNameFilters. Must happen before Sampler's constructor
// calls RegisterThread().
// calls MaybeSetProfile().
{
StaticMutexAutoLock lock(gThreadNameFiltersMutex);

Просмотреть файл

@ -221,8 +221,6 @@ public:
Sampler();
~Sampler();
void RegisterThread(ThreadInfo* aInfo);
void ToStreamAsJSON(std::ostream& stream, double aSinceTime = 0);
JSObject *ToJSObject(JSContext *aCx, double aSinceTime = 0);
mozilla::UniquePtr<char[]> ToJSON(double aSinceTime = 0);