Support view allocation counters with Venice

Summary:
Venice uses `SurfaceHandler` abstraction which start/stops surfaces independently from `Binding.cpp`, so previous `onSurfaceStart/Stop` callback would not be triggered.

On Android, each surface is used exactly once at the time of writing, so we can use `register/unregister` callbacks to create/clear remembered views for the surface.

Changelog: [Internal]

Reviewed By: sammy-SC

Differential Revision: D33845685

fbshipit-source-id: 8de4204c7498176fdbe8d44fbc5f2e4079212a1c
This commit is contained in:
Andrei Shikov
2022-02-02 09:16:25 -08:00
committed by Facebook GitHub Bot
parent fbb9d33cee
commit 65df2f30a5
@@ -266,13 +266,37 @@ void Binding::stopSurface(jint surfaceId) {
}
void Binding::registerSurface(SurfaceHandlerBinding *surfaceHandlerBinding) {
auto const &surfaceHandler = surfaceHandlerBinding->getSurfaceHandler();
auto scheduler = getScheduler();
scheduler->registerSurface(surfaceHandlerBinding->getSurfaceHandler());
if (!scheduler) {
LOG(ERROR) << "Binding::registerSurface: scheduler disappeared";
return;
}
scheduler->registerSurface(surfaceHandler);
auto mountingManager =
verifyMountingManager("FabricUIManagerBinding::registerSurface");
if (!mountingManager) {
return;
}
mountingManager->onSurfaceStart(surfaceHandler.getSurfaceId());
}
void Binding::unregisterSurface(SurfaceHandlerBinding *surfaceHandlerBinding) {
auto const &surfaceHandler = surfaceHandlerBinding->getSurfaceHandler();
auto scheduler = getScheduler();
scheduler->unregisterSurface(surfaceHandlerBinding->getSurfaceHandler());
if (!scheduler) {
LOG(ERROR) << "Binding::unregisterSurface: scheduler disappeared";
return;
}
scheduler->unregisterSurface(surfaceHandler);
auto mountingManager =
verifyMountingManager("FabricUIManagerBinding::unregisterSurface");
if (!mountingManager) {
return;
}
mountingManager->onSurfaceStop(surfaceHandler.getSurfaceId());
}
void Binding::setConstraints(