diff --git a/homeassistant/components/profiler/__init__.py b/homeassistant/components/profiler/__init__.py index 9b4164c9f4144e..d2a94dfae05c45 100644 --- a/homeassistant/components/profiler/__init__.py +++ b/homeassistant/components/profiler/__init__.py @@ -22,7 +22,6 @@ from .const import DOMAIN SERVICE_START = "start" -SERVICE_MEMORY = "memory" SERVICE_START_LOG_OBJECTS = "start_log_objects" SERVICE_STOP_LOG_OBJECTS = "stop_log_objects" SERVICE_DUMP_LOG_OBJECTS = "dump_log_objects" @@ -32,7 +31,6 @@ SERVICES = ( SERVICE_START, - SERVICE_MEMORY, SERVICE_START_LOG_OBJECTS, SERVICE_STOP_LOG_OBJECTS, SERVICE_DUMP_LOG_OBJECTS, @@ -58,10 +56,6 @@ async def _async_run_profile(call: ServiceCall) -> None: async with lock: await _async_generate_profile(hass, call) - async def _async_run_memory_profile(call: ServiceCall) -> None: - async with lock: - await _async_generate_memory_profile(hass, call) - async def _async_start_log_objects(call: ServiceCall) -> None: if LOG_INTERVAL_SUB in domain_data: domain_data[LOG_INTERVAL_SUB]() @@ -162,16 +156,6 @@ async def _async_dump_scheduled(call: ServiceCall) -> None: ), ) - async_register_admin_service( - hass, - DOMAIN, - SERVICE_MEMORY, - _async_run_memory_profile, - schema=vol.Schema( - {vol.Optional(CONF_SECONDS, default=60.0): vol.Coerce(float)} - ), - ) - async_register_admin_service( hass, DOMAIN, @@ -265,37 +249,6 @@ async def _async_generate_profile(hass: HomeAssistant, call: ServiceCall): ) -async def _async_generate_memory_profile(hass: HomeAssistant, call: ServiceCall): - # Imports deferred to avoid loading modules - # in memory since usually only one part of this - # integration is used at a time - from guppy import hpy # pylint: disable=import-outside-toplevel - - start_time = int(time.time() * 1000000) - persistent_notification.async_create( - hass, - ( - "The memory profile has started. This notification will be updated when it" - " is complete." - ), - title="Profile Started", - notification_id=f"memory_profiler_{start_time}", - ) - heap_profiler = hpy() - heap_profiler.setref() - await asyncio.sleep(float(call.data[CONF_SECONDS])) - heap = heap_profiler.heap() - - heap_path = hass.config.path(f"heap_profile.{start_time}.hpy") - await hass.async_add_executor_job(_write_memory_profile, heap, heap_path) - persistent_notification.async_create( - hass, - f"Wrote heapy memory profile to {heap_path}", - title="Profile Complete", - notification_id=f"memory_profiler_{start_time}", - ) - - def _write_profile(profiler, cprofile_path, callgrind_path): # Imports deferred to avoid loading modules # in memory since usually only one part of this @@ -307,10 +260,6 @@ def _write_profile(profiler, cprofile_path, callgrind_path): convert(profiler.getstats(), callgrind_path) -def _write_memory_profile(heap, heap_path): - heap.byrcs.dump(heap_path) - - def _log_objects(*_): # Imports deferred to avoid loading modules # in memory since usually only one part of this diff --git a/homeassistant/components/profiler/manifest.json b/homeassistant/components/profiler/manifest.json index 11896c02fdd3b6..ce4a5b2bf3e1b3 100644 --- a/homeassistant/components/profiler/manifest.json +++ b/homeassistant/components/profiler/manifest.json @@ -5,5 +5,5 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/profiler", "quality_scale": "internal", - "requirements": ["pyprof2calltree==1.4.5", "guppy3==3.1.2", "objgraph==3.5.0"] + "requirements": ["pyprof2calltree==1.4.5", "objgraph==3.5.0"] } diff --git a/homeassistant/components/profiler/services.yaml b/homeassistant/components/profiler/services.yaml index 8d9ae35ed1074e..da3128ca60abe0 100644 --- a/homeassistant/components/profiler/services.yaml +++ b/homeassistant/components/profiler/services.yaml @@ -11,19 +11,6 @@ start: min: 1 max: 3600 unit_of_measurement: seconds -memory: - name: Memory - description: Start the Memory Profiler - fields: - seconds: - name: Seconds - description: The number of seconds to run the memory profiler. - default: 60.0 - selector: - number: - min: 1 - max: 3600 - unit_of_measurement: seconds start_log_objects: name: Start log objects description: Start logging growth of objects in memory diff --git a/requirements_all.txt b/requirements_all.txt index 9e452e9d5df5fb..0e361981a359a7 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -848,9 +848,6 @@ gspread==5.5.0 # homeassistant.components.gstreamer gstreamer-player==1.1.2 -# homeassistant.components.profiler -guppy3==3.1.2 - # homeassistant.components.iaqualink h2==4.1.0 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 7e127811fc382c..06e7e624de85d4 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -643,9 +643,6 @@ growattServer==1.3.0 # homeassistant.components.google_sheets gspread==5.5.0 -# homeassistant.components.profiler -guppy3==3.1.2 - # homeassistant.components.iaqualink h2==4.1.0 diff --git a/tests/components/profiler/test_init.py b/tests/components/profiler/test_init.py index 0fc70d3ce0d891..ade27f1ad16033 100644 --- a/tests/components/profiler/test_init.py +++ b/tests/components/profiler/test_init.py @@ -10,7 +10,6 @@ SERVICE_DUMP_LOG_OBJECTS, SERVICE_LOG_EVENT_LOOP_SCHEDULED, SERVICE_LOG_THREAD_FRAMES, - SERVICE_MEMORY, SERVICE_START, SERVICE_START_LOG_OBJECTS, SERVICE_STOP_LOG_OBJECTS, @@ -53,36 +52,6 @@ def _mock_path(filename): await hass.async_block_till_done() -async def test_memory_usage(hass, tmpdir): - """Test we can setup and the service is registered.""" - test_dir = tmpdir.mkdir("profiles") - - entry = MockConfigEntry(domain=DOMAIN) - entry.add_to_hass(hass) - - assert await hass.config_entries.async_setup(entry.entry_id) - await hass.async_block_till_done() - - assert hass.services.has_service(DOMAIN, SERVICE_MEMORY) - - last_filename = None - - def _mock_path(filename): - nonlocal last_filename - last_filename = f"{test_dir}/{filename}" - return last_filename - - with patch("guppy.hpy") as mock_hpy, patch.object(hass.config, "path", _mock_path): - await hass.services.async_call( - DOMAIN, SERVICE_MEMORY, {CONF_SECONDS: 0.000001}, blocking=True - ) - - mock_hpy.assert_called_once() - - assert await hass.config_entries.async_unload(entry.entry_id) - await hass.async_block_till_done() - - async def test_object_growth_logging( hass: HomeAssistant, caplog: pytest.LogCaptureFixture ) -> None: