anchor.diff:            _normalizeVmServiceUri(serviceProtocolUri).toString();
       }
   
  -    String url = devToolsUrl.toString();
  -    // If serviceProtocolUri != null, add it to the url.
  -    if (serviceProtocolUri != null) {
  -      url = Uri.parse(devToolsUrl).replace(queryParameters: {
  -        'uri': serviceProtocolUri,
  -      }).toString();
  +    final queryParameters = {
  +      if (serviceProtocolUri != null) 'uri': serviceProtocolUri,
  +      if (appSizeBase != null) 'appSizeBase': appSizeBase,
  +      if (appSizeTest != null) 'appSizeTest': appSizeTest,
  +    };
  +    String url = Uri.parse(devToolsUrl)
  +        .replace(queryParameters: queryParameters)
  +        .toString();
  +
  +    // If app size parameters are present, open to the standalone `appsize`
  +    // page, regardless if there is a vm service uri specified. We only check
  +    // for the presence of [appSizeBase] here because [appSizeTest] may or may
  +    // not be specified (it should only be present for diffs). If [appSizeTest]
  +    // is present without [appSizeBase], we will ignore the parameter.
  +    if (appSizeBase != null) {
  +      final startQueryParamIndex = url.indexOf('?');
  +      if (startQueryParamIndex != -1) {
  +        url = '${url.substring(0, startQueryParamIndex)}'
  +            '/#/appsize'
  +            '${url.substring(startQueryParamIndex)}';
  +      }
       }
   
       try {
  
positive.code:       : defaultTryPorts;
    final bool verboseMode = args[argVerbose];
    final String hostname = args[argHost];
  
    if (help) {
      print('Dart DevTools version ${await _getVersion()}');
  
negative.code:   shelf.Handler handler,
    String serviceProtocolUri,
    String profileFilename,
    String appSizeBase,
    String appSizeTest,
  }) async {
    hostname ??= 'localhost';
  
  