OSSCA Chromium

기여 목록 / 8450670

[LCPP] Remove the kMultipleLcppKeyInitiatorOriginFix kill switch

BrowsercleanupMerged

LCP Critical Path Predictor(LCPP)가 initiator origin을 검사하는 IsValidInitiatorOrigin()에 남아 있던 킬스위치 kMultipleLcppKeyInitiatorOriginFix를 제거했습니다. 2024-11에 «잘 동작하는 것이 확인되면 제거»라는 주석과 함께 들어와 10개월 넘게 기본 켜짐이었고 버그도 FIXED로 닫혀 있어, 동작은 바뀌지 않습니다(crbug.com/380105415). 1파일 +6/−18. 리뷰에서 chikamune@의 제안으로 IsValidInitiatorOrigin()을 바로 위의 IsURLValidForLcpp()를 재사용하도록 줄인 PS2(최종 +2/−18)가 2026-09-29에 머지됐습니다(eb37902301397). chikamune@와 yyanagisawa@의 +1을 받았고, yyanagisawa@가 +1과 함께 CQ를 돌려 한 번에 통과했습니다.

문제 설명

  • issue url: https://crbug.com/380105415
  • LCPP는 페이지를 연 origin(initiator)과 URL을 함께 키로 학습합니다(double-keyed LCPP). 수정 CL 6038577이 opaque·빈 host·localhost·https가 아닌 initiator origin을 키에서 거르도록 고치면서, 롤백용 킬스위치로 감싸 두었습니다. 플래그가 꺼지면 host 길이만 검사하는 옛 동작이었습니다.
  • 지금은 플래그 정의, static const bool 캐시 변수, 꺼진 쪽 분기만 남아 있었습니다.

해결 내용

  • lcp_critical_path_predictor_util.cc에서 BASE_FEATURE 정의와 TODO를 지웠습니다.
  • IsValidInitiatorOrigin()을 켜진 쪽 검사만 남기고 정리했습니다. 캐시 변수와 else 분기가 없어졌습니다.
  • 같은 파일에 다른 FeatureList 사용이 남아 있어 include는 그대로 두었습니다.
 bool IsValidInitiatorOrigin(const url::Origin& initiator_origin) {
-  static const bool kMultipleLcppKeyInitiatorOriginFixEnabled =
-      base::FeatureList::IsEnabled(kMultipleLcppKeyInitiatorOriginFix);
-  if (kMultipleLcppKeyInitiatorOriginFixEnabled) {
-    ...
-  } else {
-    return initiator_origin.host().size() <= ...;
-  }
+  GURL url = initiator_origin.GetURL();
+  return !initiator_origin.opaque() && url.is_valid() && ...;
 }

발굴 과정

«kill switch» 주석이 붙은 기본 켜짐 플래그 128개를 모아, 도입 시점과 제거 의도가 적혀 있는지 하나씩 확인한 스캔에서 나온 항목입니다. blame 날짜는 2025-09의 BASE_FEATURE 인자 마이그레이션 커밋으로 덮여 있어 git log -S로 실제 도입일을 다시 쟀습니다. 파일의 열린 CL이 전부 DO-NOT-SUBMIT 실험뿐인 것을 확인하고 OSSCA #496으로 등록했습니다.

테스트 방법

동작 불변 정리라 새 테스트는 없고 기존 테스트 통과가 검증입니다.

  • gclient sync 후 unit_tests 빌드: Mac M5, 2시간 4분 / 20,718 스텝
  • unit_tests --gtest_filter='LcpCriticalPathPredictor*:*Lcpp*:*LCPP*' 127/127 통과
  • presubmit 0 경고

배운 점

  • 킬스위치 후보를 blame으로 거르면 대규모 기계적 마이그레이션 커밋에 날짜가 덮입니다. 도입일은 git log -S'<플래그 이름>' --reverse로 봅니다.
  • 한 파일에 플래그가 여럿이면 include를 지우기 전에 남은 FeatureList 사용을 확인합니다.

참고 자료