기여 목록 / 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()안에 있던 periodicmin_intervalCHECK는Register()입구의 CHECK가 같은 조건을 이미 보장해서 함께 지웠습니다.histograms.xml19항목, 다른 곳에서 쓰지 않게 된 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 통과 —BackgroundSyncManagerTest88개, 살아 있는 히스토그램을 검사하도록 바꾼HistogramsRecordedAtCompletion,BackgroundSyncMetricsTest.RecordOneShotEventResult포함- presubmit 0 경고, 히스토그램
pretty_print.py·validate_format.py통과
배운 점
- 히스토그램 이름을 문자열 검색만으로 세면
StrCat이나 접두·접미로 조합되는 이름을 놓칩니다. 후보를 확정하기 전에 그 파일의UmaHistogram*호출을 모두 읽어야 합니다. - 히스토그램을 지우면 그 히스토그램만 쓰던 enum이 남습니다.
validate_format.py가 «어떤 지표도 참조하지 않는 enum»을 오류로 잡아 주므로, XML을 고친 뒤에는 꼭 돌립니다. - 지표 코드를 지울 때는 그 안에 섞인 동작 코드를 가려내야 합니다. 여기서는 이벤트 묶음의 완료 콜백이 시간 기록 함수에 묶여 있었는데, 콜백 자체는 동작에 필요해서 남겼습니다.