зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1365400 - Add nsIProfiler::GetAllFeatures. r=njn
MozReview-Commit-ID: EfjiUYvfIgM --HG-- extra : rebase_source : a690e0a451c31fe644ac3843f96afc1e6a2b42f0
This commit is contained in:
Родитель
d6cb0eba49
Коммит
61580a8992
|
@ -65,8 +65,19 @@ interface nsIProfiler : nsISupports
|
|||
[optional] in double aSinceTime);
|
||||
|
||||
boolean IsActive();
|
||||
|
||||
/**
|
||||
* Returns an array of the features that are supported in this build.
|
||||
* Features may vary depending on platform and build flags.
|
||||
*/
|
||||
void GetFeatures(out uint32_t aCount, [retval, array, size_is(aCount)] out string aFeatures);
|
||||
|
||||
/**
|
||||
* Returns an array of all features that are supported by the profiler.
|
||||
* The array may contain features that are not supported in this build.
|
||||
*/
|
||||
void GetAllFeatures(out uint32_t aCount, [retval, array, size_is(aCount)] out string aFeatures);
|
||||
|
||||
/**
|
||||
* The starting parameters that were sent to the profiler for sampling.
|
||||
* If the profiler is not currently sampling, this will return null.
|
||||
|
|
|
@ -418,13 +418,12 @@ nsProfiler::IsActive(bool *aIsActive)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsProfiler::GetFeatures(uint32_t* aCount, char*** aFeatureList)
|
||||
static void
|
||||
GetArrayOfStringsForFeatures(uint32_t aFeatures,
|
||||
uint32_t* aCount, char*** aFeatureList)
|
||||
{
|
||||
uint32_t features = profiler_get_available_features();
|
||||
|
||||
#define COUNT_IF_SET(n_, str_, Name_) \
|
||||
if (ProfilerFeature::Has##Name_(features)) { \
|
||||
if (ProfilerFeature::Has##Name_(aFeatures)) { \
|
||||
len++; \
|
||||
}
|
||||
|
||||
|
@ -437,7 +436,7 @@ nsProfiler::GetFeatures(uint32_t* aCount, char*** aFeatureList)
|
|||
auto featureList = static_cast<char**>(moz_xmalloc(len * sizeof(char*)));
|
||||
|
||||
#define DUP_IF_SET(n_, str_, Name_) \
|
||||
if (ProfilerFeature::Has##Name_(features)) { \
|
||||
if (ProfilerFeature::Has##Name_(aFeatures)) { \
|
||||
size_t strLen = strlen(str_); \
|
||||
featureList[i] = static_cast<char*>( \
|
||||
nsMemory::Clone(str_, (strLen + 1) * sizeof(char))); \
|
||||
|
@ -448,10 +447,24 @@ nsProfiler::GetFeatures(uint32_t* aCount, char*** aFeatureList)
|
|||
size_t i = 0;
|
||||
PROFILER_FOR_EACH_FEATURE(DUP_IF_SET)
|
||||
|
||||
#undef STRDUP_IF_SET
|
||||
#undef DUP_IF_SET
|
||||
|
||||
*aFeatureList = featureList;
|
||||
*aCount = len;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsProfiler::GetFeatures(uint32_t* aCount, char*** aFeatureList)
|
||||
{
|
||||
uint32_t features = profiler_get_available_features();
|
||||
GetArrayOfStringsForFeatures(features, aCount, aFeatureList);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsProfiler::GetAllFeatures(uint32_t* aCount, char*** aFeatureList)
|
||||
{
|
||||
GetArrayOfStringsForFeatures((uint32_t)-1, aCount, aFeatureList);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче