viz: Refactor FragmentShader to construct fewer std::strings.

Should be more efficient at runtime, and saves 8 kB of Android APK size.
This should also eliminate some static destructors for these strings.

Bug: 770266,341941
Change-Id: Idb471aa6f22288865ed80b0089c48ad7f8acbe65
Reviewed-on: https://chromium-review.googlesource.com/648289
Commit-Queue: Jeremy Roman <jbroman@chromium.org>
Reviewed-by: weiliangc <weiliangc@chromium.org>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: Bruce Dawson <brucedawson@chromium.org>
Cr-Commit-Position: refs/heads/master@{#507714}

CrOS-Libchrome-Original-Commit: 40a4dc1ee61b9ff8f531ceedaa9e895ca8d820f6
diff --git a/base/strings/string_piece.h b/base/strings/string_piece.h
index 08feb60..d6236d1 100644
--- a/base/strings/string_piece.h
+++ b/base/strings/string_piece.h
@@ -175,13 +175,13 @@
   // We provide non-explicit singleton constructors so users can pass
   // in a "const char*" or a "string" wherever a "StringPiece" is
   // expected (likewise for char16, string16, StringPiece16).
-  BasicStringPiece() : ptr_(NULL), length_(0) {}
+  constexpr BasicStringPiece() : ptr_(NULL), length_(0) {}
   BasicStringPiece(const value_type* str)
       : ptr_(str),
         length_((str == NULL) ? 0 : STRING_TYPE::traits_type::length(str)) {}
   BasicStringPiece(const STRING_TYPE& str)
       : ptr_(str.data()), length_(str.size()) {}
-  BasicStringPiece(const value_type* offset, size_type len)
+  constexpr BasicStringPiece(const value_type* offset, size_type len)
       : ptr_(offset), length_(len) {}
   BasicStringPiece(const typename STRING_TYPE::const_iterator& begin,
                    const typename STRING_TYPE::const_iterator& end) {
@@ -201,9 +201,9 @@
   // returned buffer may or may not be null terminated.  Therefore it is
   // typically a mistake to pass data() to a routine that expects a NUL
   // terminated string.
-  const value_type* data() const { return ptr_; }
-  size_type size() const { return length_; }
-  size_type length() const { return length_; }
+  constexpr const value_type* data() const { return ptr_; }
+  constexpr size_type size() const { return length_; }
+  constexpr size_type length() const { return length_; }
   bool empty() const { return length_ == 0; }
 
   void clear() {
@@ -219,18 +219,16 @@
     length_ = str ? STRING_TYPE::traits_type::length(str) : 0;
   }
 
-  value_type operator[](size_type i) const { return ptr_[i]; }
+  constexpr value_type operator[](size_type i) const { return ptr_[i]; }
   value_type front() const { return ptr_[0]; }
   value_type back() const { return ptr_[length_ - 1]; }
 
-  void remove_prefix(size_type n) {
+  constexpr void remove_prefix(size_type n) {
     ptr_ += n;
     length_ -= n;
   }
 
-  void remove_suffix(size_type n) {
-    length_ -= n;
-  }
+  constexpr void remove_suffix(size_type n) { length_ -= n; }
 
   int compare(const BasicStringPiece<STRING_TYPE>& x) const {
     int r = wordmemcmp(