From 20cda451293ecbf7d2d6fdafb8687349f5fd9591 Mon Sep 17 00:00:00 2001 From: Aditya Sharat Date: Thu, 21 Mar 2024 15:22:34 -0700 Subject: [PATCH] Fixes bug in TraceListener implementation Summary: Fixes bug in TraceListener implementation Reviewed By: fabiocarballo Differential Revision: D55187241 fbshipit-source-id: 7698360b486b524e8678b2089136ee630d2b4adc --- .../facebook/rendercore/debug/DebugEvents.kt | 2 +- .../rendercore/debug/DebugEventsTest.kt | 23 ++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/litho-rendercore/src/main/java/com/facebook/rendercore/debug/DebugEvents.kt b/litho-rendercore/src/main/java/com/facebook/rendercore/debug/DebugEvents.kt index 9e7de03ab9b..9a42c87678b 100644 --- a/litho-rendercore/src/main/java/com/facebook/rendercore/debug/DebugEvents.kt +++ b/litho-rendercore/src/main/java/com/facebook/rendercore/debug/DebugEvents.kt @@ -362,7 +362,7 @@ object DebugEventDispatcher { val subscribersToNotify = subscribers.filter { subscriber -> val matches = subscriber.events.contains(type) || subscriber.events.contains(All) - if (subscriber is TraceListener<*>) { + if (matches && subscriber is TraceListener<*>) { traceListeners.add(subscriber as TraceListener) } return@filter matches diff --git a/litho-rendercore/src/test/java/com/facebook/rendercore/debug/DebugEventsTest.kt b/litho-rendercore/src/test/java/com/facebook/rendercore/debug/DebugEventsTest.kt index 5d7326bf7d7..64a39e5cb21 100644 --- a/litho-rendercore/src/test/java/com/facebook/rendercore/debug/DebugEventsTest.kt +++ b/litho-rendercore/src/test/java/com/facebook/rendercore/debug/DebugEventsTest.kt @@ -422,11 +422,15 @@ class DebugEventsTest { @Test fun `trace event should be dispatched to trace listeners`() { + val traceListener0 = TestTraceListener("random") + DebugEventBus.subscribe(traceListener0) + val traceListener1 = TestTraceListener() DebugEventBus.subscribe(traceListener1) DebugEventDispatcher.trace(type = TestEvent, renderStateId = { TestRenderStateId }) {} + assertThat(traceListener0.records.size).isEqualTo(0) assertThat(traceListener1.records.size).isEqualTo(1) val traceListener2 = TestTraceListener() @@ -434,8 +438,23 @@ class DebugEventsTest { DebugEventDispatcher.trace(type = TestEvent, renderStateId = { TestRenderStateId }) {} + assertThat(traceListener0.records.size).isEqualTo(0) assertThat(traceListener1.records.size).isEqualTo(2) assertThat(traceListener2.records.size).isEqualTo(1) + + DebugEventBus.unsubscribe(traceListener1) + + DebugEventDispatcher.trace(type = TestEvent, renderStateId = { TestRenderStateId }) {} + + assertThat(traceListener0.records.size).isEqualTo(0) + assertThat(traceListener1.records.size).isEqualTo(2) + assertThat(traceListener2.records.size).isEqualTo(2) + + DebugEventDispatcher.trace(type = "random", renderStateId = { TestRenderStateId }) {} + + assertThat(traceListener0.records.size).isEqualTo(1) + assertThat(traceListener1.records.size).isEqualTo(2) + assertThat(traceListener2.records.size).isEqualTo(2) } class TestEventSubscriber(val listener: (DebugEvent) -> Unit) : DebugEventSubscriber(TestEvent) { @@ -453,7 +472,9 @@ class DebugEventsTest { } } - class TestTraceListener : TraceListener, DebugEventSubscriber(TestEvent) { + class TestTraceListener( + vararg events: String = arrayOf(TestEvent), + ) : TraceListener, DebugEventSubscriber(*events) { val records = mutableListOf()