Skip to content
This repository has been archived by the owner on May 1, 2023. It is now read-only.

Commit

Permalink
TraceEvents provider names refresh
Browse files Browse the repository at this point in the history
Reviewed By: BurntBrunch

Differential Revision: D19240823

fbshipit-source-id: b893ab0e12ae8a0a626e7e4407d45f2cede743c6
  • Loading branch information
aandreyeu authored and facebook-github-bot committed Jan 10, 2020
1 parent 2ebfed2 commit 5cb83de
Show file tree
Hide file tree
Showing 6 changed files with 34 additions and 44 deletions.
4 changes: 2 additions & 2 deletions cpp/JNIOnLoad.cpp
Expand Up @@ -99,7 +99,7 @@ static void clearAllProviders(JNIEnv* env, jobject cls) {
TraceProviders::get().clearAllProviders();
}

static void initProviderNames(
static void refreshProviderNames(
fbjni::alias_ref<jobject> cls,
fbjni::alias_ref<fbjni::JArrayInt> provider_ids,
fbjni::alias_ref<fbjni::jtypeArray<jstring>> provider_names) {
Expand Down Expand Up @@ -133,7 +133,7 @@ JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void*) {
makeNativeMethod(
"nativeClearAllProviders", profilo::clearAllProviders),
makeNativeMethod(
"nativeInitProviderNames", profilo::initProviderNames),
"nativeRefreshProviderNames", profilo::refreshProviderNames),
});

fbjni::registerNatives(
Expand Down
1 change: 1 addition & 0 deletions java/main/com/facebook/profilo/core/BUCK
Expand Up @@ -71,6 +71,7 @@ fb_core_android_library(
],
exported_deps = [
":constants",
":registry",
],
)

Expand Down
17 changes: 0 additions & 17 deletions java/main/com/facebook/profilo/core/CoreTraceListener.java
Expand Up @@ -14,10 +14,7 @@
package com.facebook.profilo.core;

import com.facebook.profilo.entries.EntryType;
import com.facebook.profilo.ipc.TraceContext;
import com.facebook.profilo.logger.Logger;
import java.util.HashMap;
import java.util.List;
import java.util.Set;

class CoreTraceListener extends DefaultTraceOrchestratorListener {
Expand Down Expand Up @@ -96,18 +93,4 @@ public void onProvidersStop(int activeProviders) {
addTraceAnnotation(
Identifiers.ACTIVE_PROVIDERS, "Active providers", activeProvidersStr.toString());
}

@Override
public void onTraceStart(TraceContext context) {
if (TraceEvents.isProviderNamesInitialized()) {
return;
}
// Initialize provider names
List<String> registeredProviders = ProvidersRegistry.getRegisteredProviders();
HashMap<String, Integer> providerNamesMap = new HashMap<>(registeredProviders.size());
for (String providerName : registeredProviders) {
providerNamesMap.put(providerName, ProvidersRegistry.getBitMaskFor(providerName));
}
TraceEvents.initProviderNames(providerNamesMap);
}
}
4 changes: 4 additions & 0 deletions java/main/com/facebook/profilo/core/ProvidersRegistry.java
Expand Up @@ -69,4 +69,8 @@ public static List<String> getRegisteredProviders() {
public static Set<String> getRegisteredProvidersByBitMask(int bitMask) {
return sRegistry.getRegisteredEntriesByBitMask(bitMask);
}

public static int getBitmaskForAllEntries() {
return sRegistry.getBitMaskForAllEntries();
}
}
51 changes: 26 additions & 25 deletions java/main/com/facebook/profilo/core/TraceEvents.java
Expand Up @@ -13,7 +13,7 @@
*/
package com.facebook.profilo.core;

import java.util.Map;
import java.util.List;

/** Responsible for managing the currently allowed trace providers. */
public final class TraceEvents {
Expand All @@ -24,7 +24,7 @@ public final class TraceEvents {
*/
public static boolean sInitialized;

private static volatile boolean sProviderNamesInitialized;
private static int sLastNameRefreshProvidersState;
private static volatile int sProviders = 0;

public static boolean isEnabled(int provider) {
Expand All @@ -35,40 +35,41 @@ public static int enabledMask(int providers) {
return sProviders & providers;
}

public static boolean isProviderNamesInitialized() {
return sProviderNamesInitialized;
public static synchronized void enableProviders(int providers) {
sProviders = nativeEnableProviders(providers);
}

public static void initProviderNames(Map<String, Integer> providerNamesMap) {
public static synchronized void disableProviders(int providers) {
sProviders = nativeDisableProviders(providers);
}

public static synchronized void clearAllProviders() {
nativeClearAllProviders();
sProviders = 0;
}

public static synchronized void refreshProviderNames() {
if (!sInitialized) {
throw new IllegalStateException("Native library is not initialized.");
}
if (sProviderNamesInitialized) {
int currentBitmaskForAllEntries = ProvidersRegistry.getBitmaskForAllEntries();
if (currentBitmaskForAllEntries == sLastNameRefreshProvidersState) {
return;
}
int size = providerNamesMap.size();
sLastNameRefreshProvidersState = currentBitmaskForAllEntries;

List<String> registeredProviders = ProvidersRegistry.getRegisteredProviders();
int size = registeredProviders.size();
int[] providerIds = new int[size];
String[] providerNames = new String[size];

int i = 0;
for (Map.Entry<String, Integer> nextProvider : providerNamesMap.entrySet()) {
providerNames[i] = nextProvider.getKey();
providerIds[i++] = nextProvider.getValue();
for (String nextProvider : registeredProviders) {
providerNames[i] = nextProvider;
providerIds[i++] = ProvidersRegistry.getBitMaskFor(nextProvider);
}
nativeInitProviderNames(providerIds, providerNames);
sProviderNamesInitialized = true;
}

public static synchronized void enableProviders(int providers) {
sProviders = nativeEnableProviders(providers);
}

public static synchronized void disableProviders(int providers) {
sProviders = nativeDisableProviders(providers);
}

public static synchronized void clearAllProviders() {
nativeClearAllProviders();
sProviders = 0;
nativeRefreshProviderNames(providerIds, providerNames);
}

static native int nativeEnableProviders(int providers);
Expand All @@ -77,5 +78,5 @@ public static synchronized void clearAllProviders() {

static native void nativeClearAllProviders();

static native void nativeInitProviderNames(int[] providerIds, String[] providerNames);
static native void nativeRefreshProviderNames(int[] providerIds, String[] providerNames);
}
1 change: 1 addition & 0 deletions java/main/com/facebook/profilo/core/TraceOrchestrator.java
Expand Up @@ -374,6 +374,7 @@ private void performConfigTransition(Config newConfig) {
*/
@Override
public void onTraceStartSync(TraceContext context) {
TraceEvents.refreshProviderNames();
// Increment the providers
TraceEvents.enableProviders(context.enabledProviders);

Expand Down

0 comments on commit 5cb83de

Please sign in to comment.