bash_completion: Cache command flags

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

Change-Id: I65e3effdb7b5938e729a669b0f41845c0f50d4ff
Reviewed-on: https://chromium-review.googlesource.com/1895507
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 d045cb4..4dc43b2 100644
--- a/bash_completion
+++ b/bash_completion
@@ -36,7 +36,11 @@
   COMPREPLY=()
   local cur="${COMP_WORDS[COMP_CWORD]}"
   if [[ "${cur}" == --* ]]; then
-    COMPREPLY=( $(compgen -W "$(_flags)" -- ${cur}) )
+    local key="flags/${COMP_WORDS[0]}"
+    if [[ -z "${_comp_cache[${key}]}" ]]; then
+      _comp_cache[${key}]="$(_flags)"
+    fi
+    COMPREPLY=( $(compgen -W "${_comp_cache[${key}]}" -- "${cur}") )
     return 0
   fi
   return 1