기여 목록 / 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개(
SnoopingProtectionControllerTestMetrics5개,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을 한 사람이 함께 채웁니다.