OSSCA Chromium

기여 목록 / 8499654

[Background Sync] Remove the expired BackgroundSync histograms

ContentcleanupIn Review

Background Sync API의 사용 지표를 모아 기록하던 BackgroundSyncMetrics에서, 만료돼 더 이상 기록되지 않는 히스토그램 19개와 그것만을 위한 코드를 제거했습니다. 20개 중 아직 살아 있는 BackgroundSync.Event.OneShotResultPattern 하나만 남겼습니다. 10파일 +43/−638.

문제 설명

  • crbug 없음 (자체 발굴)
  • BackgroundSyncMetrics는 등록 성공·실패, 이벤트 시작·결과, 이벤트 묶음 처리 시간, wakeup task 결과 등 20개의 히스토그램을 기록했습니다. 이름 일부는 OneShot/Periodic을 StrCat으로 붙여 만듭니다.
  • histograms.xml에서 그중 19개가 2022-07-31 ~ 2025-02-16에 만료됐고 expired_intentionally 표시도 없었습니다. 2027-01-31까지 살아 있는 것은 BackgroundSync.Event.OneShotResultPattern 하나입니다. 히스토그램 문서는 만료된 히스토그램의 기록 코드를 죽은 코드로 보고 지우라고 합니다.

해결 내용

  • 만료된 히스토그램만 기록하던 함수 7개와 BackgroundSyncManager의 호출처를 지웠습니다.
  • 지표에만 쓰이던 코드도 지웠습니다. 등록 때 계산하던 «바로 실행 가능 여부»·«중복 등록 여부» enum, 이벤트 묶음의 시작 시각, 이벤트가 시작될 때마다 하던 main frame client 조회입니다. 더 이상 기록을 하지 않는 RecordFailureAndPostError()는 PostError()로 이름을 바꿨습니다.
  • 남은 함수는 RecordOneShotEventResult()가 되었고, periodic 이벤트가 끝날 때는 조회 자체를 하지 않습니다.
  • 이벤트 묶음이 모두 끝나면 완료 콜백을 부르는 barrier는 동작에 필요해서 남겼습니다. 시간 기록용 OnAllSyncEventsCompleted()를 거치는 대신 base::BindPostTaskToCurrentDefault()로 콜백을 넘깁니다.
  • CountRegisterSuccess() 안에 있던 periodic min_interval CHECK는 Register() 입구의 CHECK가 같은 조건을 이미 보장해서 함께 지웠습니다.
  • histograms.xml 19항목, 다른 곳에서 쓰지 않게 된 enum 6개, 히스토그램 경계값으로만 쓰이던 BACKGROUND_SYNC_STATUS_MAX를 지웠습니다.

발굴 과정

09-29 «만료된 히스토그램 기록 코드» 스캔에서 이 파일은 «이름이 그대로 적힌 히스토그램 7개가 전부 만료»로 잡혔습니다. 그런데 착수하면서 StrCat으로 조합되는 이름까지 세어 보니 히스토그램은 20개였고, 그중 하나는 아직 살아 있었습니다. 그래서 클래스를 통째로 지우는 대신 그 하나만 남기는 정리로 범위를 바꿨습니다. 히스토그램 owner 중 한 명은 장기 휴가 중이고 한 명은 계정이 없어서, 코드 OWNER인 peter@에게 먼저 리뷰를 요청했습니다. OSSCA #597.

테스트 방법

  • 바뀐 소스 4개를 먼저 개별 컴파일(autoninja -C out/Default ../../<파일>.cc^)로 확인
  • content_unittests 빌드(이 Mac에서 첫 빌드, 647스텝 16분)
  • content_unittests --gtest_filter='*BackgroundSync*' 118/118 통과 — BackgroundSyncManagerTest 88개, 살아 있는 히스토그램을 검사하도록 바꾼 HistogramsRecordedAtCompletion, BackgroundSyncMetricsTest.RecordOneShotEventResult 포함
  • presubmit 0 경고, 히스토그램 pretty_print.py·validate_format.py 통과

배운 점

  • 히스토그램 이름을 문자열 검색만으로 세면 StrCat이나 접두·접미로 조합되는 이름을 놓칩니다. 후보를 확정하기 전에 그 파일의 UmaHistogram* 호출을 모두 읽어야 합니다.
  • 히스토그램을 지우면 그 히스토그램만 쓰던 enum이 남습니다. validate_format.py가 «어떤 지표도 참조하지 않는 enum»을 오류로 잡아 주므로, XML을 고친 뒤에는 꼭 돌립니다.
  • 지표 코드를 지울 때는 그 안에 섞인 동작 코드를 가려내야 합니다. 여기서는 이벤트 묶음의 완료 콜백이 시간 기록 함수에 묶여 있었는데, 콜백 자체는 동작에 필요해서 남겼습니다.

참고 자료