OSSCA Chromium

기여 목록 / 8505776

[ash] Remove expired HPS snooping protection and quick dim histograms

PlatformcleanupMerged

ChromeOS 사람 감지 센서(HPS) 기능인 화면 엿보기 방지(Snooping Protection)와 빠른 화면 어둡게 하기(Quick Dim)가 기록하던 만료 히스토그램 6개를, 그 히스토그램만을 위해 존재하던 상태·함수·테스트와 함께 지웠습니다. 10파일 +1/−448. 처음 리뷰어 blundell@가 도메인을 더 잘 아는 oshima@에게 리뷰를 넘겼고, oshima@의 +1 뒤 chromeos_hps 히스토그램 OWNER jimmyxgong@를 두 번째 리뷰어로 더해 승인 두 개를 받았습니다. oshima@가 CQ를 돌려 한 번에 통과했고 2026-10-04에 머지됐습니다(a725ea9d20cb7).

문제 설명

  • issue url: 버그 번호 없음 (OSSCA #650)
  • ash/system/human_presence/human_presence_metrics.h의 이름 상수로 크롬이 기록하는 히스토그램은 ChromeOS.HPS.SnoopingProtection.{Enabled,FlakeyDetection,Positive.Duration,Negative.Duration}, ChromeOS.HPS.SnoopingProtectionNotificationSuppression.Enabled(2023-05-31 만료), ChromeOS.HPS.QuickDim.Enabled(2024-03-24 만료)입니다.
  • 기록 코드뿐 아니라 지표 때문에 생긴 상태가 남아 있었습니다. 엿보기 방지 컨트롤러의 존재/부재 시간 측정(LogPresenceWindow(), 마지막 보고 시각), 알림 차단기의 pref 읽기, 전원 설정의 Quick Dim 변경 추적이 그것입니다.

해결 내용

  • 지표 헤더를 지우고 BUILD.gn에서 뺐습니다.
  • 컨트롤러에서 기록 세 곳과 LogPresenceWindow(), last_presence_report_time_을 지웠습니다.
  • 알림 차단기의 OnBlockingPrefChanged()는 히스토그램을 위해서만 pref를 읽고 있어서, 그 부분을 지우고 상태 갱신 호출만 남겼습니다.
  • 전원 설정의 UpdatePowerPolicyFromPrefsChange()는 2022년 지표 CL(crrev.com/c/3361618)이 Quick Dim 변경을 세려고 콜백 사이에 끼워 넣은 함수였습니다. 이 함수와 quick_dim_pref_enabled_를 지우고, 콜백을 원래대로 UpdatePowerPolicyFromPrefs()에 직접 연결했습니다.
  • 지표만 검사하던 테스트 6개(SnoopingProtectionControllerTestMetrics 5개, PowerPrefsTest.QuickDimMetrics)와 histograms.xml 5항목을 지웠습니다.
  • 같은 xml의 TurnOn·Update·Image 히스토그램은 크롬 밖(플랫폼 데몬)에서 기록하므로 그대로 뒀습니다.
   base::RepeatingClosure update_callback(base::BindRepeating(
-      &PowerPrefs::UpdatePowerPolicyFromPrefsChange, base::Unretained(this)));
+      &PowerPrefs::UpdatePowerPolicyFromPrefs, base::Unretained(this)));

발굴 과정

Mac에서 ChromeOS 경로의 «파일 전체 만료» 후보를 뽑았고(LB), 리눅스에서 파일을 다시 읽어 확인했습니다. 스캔 결과로는 «4개 만료»였지만, 두 지속 시간 히스토그램이 xml에 {Result} 토큰 이름으로 정의돼 있어 실제로는 6개 전부 만료였습니다. UpdatePowerPolicyFromPrefsChange()가 왜 있는지 git log -S로 추적해, 지표 CL이 콜백을 바꿔 끼운 것임을 확인하고 원래 연결로 되돌렸습니다.

테스트 방법

  • 리눅스 박스의 target_os="chromeos" 빌드(out/cros)에서 ash_unittests 증분 빌드: 13 스텝 2분.
  • gn check //ash:ash //ash:ash_unittests, validate_format.py, pretty_print.py --presubmit 통과.
  • ash_unittests --gtest_filter='SnoopingProtection*:PowerPrefs*': 수정 전 48/48 → 수정 후 42/42. 빠진 6개가 지운 지표 전용 테스트와 정확히 같은지 이름으로 대조했습니다.
  • presubmit 0 경고

배운 점

  • 패턴 이름({Result} 같은 토큰)으로 정의된 히스토그램은 이름 검색으로 만료 여부가 안 잡힙니다. xml의 토큰 정의까지 열어 봐야 합니다.
  • 지표 CL이 남긴 구조(콜백 사이에 끼운 함수, 변경 추적 멤버)는 그 CL의 diff를 읽으면 되돌릴 범위가 분명해집니다.
  • 업로드 뒤 Gerrit이 «제목 72자 초과» 경고를 내서, 리뷰가 시작되기 전에 설명만 고친 패치셋으로 제목을 줄였습니다.
  • 코드 OWNER의 승인만으로는 histograms.xml이 채워지지 않습니다. 두 번째 리뷰어를 그 xml의 메타데이터 OWNER로 고르면 xml 승인과 두 번째 커미터 +1을 한 사람이 함께 채웁니다.

참고 자료