bash_completion: Cache all pkgs for cros_workon

BUG=none
TEST=cros_workon start <tab><tab>

Change-Id: I7467d4af3221c3c5fb0a007130adb7b02a07c53d
Reviewed-on: https://chromium-review.googlesource.com/1895506
Tested-by: Craig Hesling <hesling@chromium.org>
Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
Legacy-Commit-Queue: Commit Bot <commit-bot@chromium.org>
Reviewed-by: Mike Frysinger <vapier@chromium.org>
diff --git a/bash_completion b/bash_completion
index 22b4729..d045cb4 100644
--- a/bash_completion
+++ b/bash_completion
@@ -193,7 +193,11 @@
   local command="${COMP_WORDS[1]}"
   # If "start", complete based on all workon packages.
   if [[ ${command} == "start" ]]; then
-    COMPREPLY=($(compgen -W "$(_cros_workon_list --all)" -- "$package"))
+    local key="pkgs/all"
+    if [[ -z "${_comp_cache[${key}]}" ]]; then
+      _comp_cache[${key}]="$(_cros_workon_list --all)"
+    fi
+    COMPREPLY=($(compgen -W "${_comp_cache[${key}]}" -- "${package}"))
     return 0
   fi
   # If "stop" or "iterate", complete based on all live packages.