| 112 | } // anonymous namespace |
| 113 | |
| 114 | bool DeviceNameUtils::ParseFullName(StringPiece fullname, ParsedName* p) { |
| 115 | p->Clear(); |
| 116 | if (fullname == "/") { |
| 117 | return true; |
| 118 | } |
| 119 | while (!fullname.empty()) { |
| 120 | bool progress = false; |
| 121 | if (absl::ConsumePrefix(&fullname, "/job:")) { |
| 122 | p->has_job = !absl::ConsumePrefix(&fullname, "*"); |
| 123 | if (p->has_job && !ConsumeJobName(&fullname, &p->job)) { |
| 124 | return false; |
| 125 | } |
| 126 | progress = true; |
| 127 | } |
| 128 | if (absl::ConsumePrefix(&fullname, "/replica:")) { |
| 129 | p->has_replica = !absl::ConsumePrefix(&fullname, "*"); |
| 130 | if (p->has_replica && !ConsumeNumber(&fullname, &p->replica)) { |
| 131 | return false; |
| 132 | } |
| 133 | progress = true; |
| 134 | } |
| 135 | if (absl::ConsumePrefix(&fullname, "/task:")) { |
| 136 | p->has_task = !absl::ConsumePrefix(&fullname, "*"); |
| 137 | if (p->has_task && !ConsumeNumber(&fullname, &p->task)) { |
| 138 | return false; |
| 139 | } |
| 140 | progress = true; |
| 141 | } |
| 142 | if (absl::ConsumePrefix(&fullname, "/device:")) { |
| 143 | p->has_type = !absl::ConsumePrefix(&fullname, "*"); |
| 144 | if (p->has_type && !ConsumeDeviceType(&fullname, &p->type)) { |
| 145 | return false; |
| 146 | } |
| 147 | if (!absl::ConsumePrefix(&fullname, ":")) { |
| 148 | p->has_id = false; |
| 149 | } else { |
| 150 | p->has_id = !absl::ConsumePrefix(&fullname, "*"); |
| 151 | if (p->has_id && !ConsumeNumber(&fullname, &p->id)) { |
| 152 | return false; |
| 153 | } |
| 154 | } |
| 155 | progress = true; |
| 156 | } |
| 157 | |
| 158 | // Handle legacy naming convention for cpu and gpu. |
| 159 | if (absl::ConsumePrefix(&fullname, "/cpu:") || |
| 160 | absl::ConsumePrefix(&fullname, "/CPU:")) { |
| 161 | p->has_type = true; |
| 162 | p->type = "CPU"; // Treat '/cpu:..' as uppercase '/device:CPU:...' |
| 163 | p->has_id = !absl::ConsumePrefix(&fullname, "*"); |
| 164 | if (p->has_id && !ConsumeNumber(&fullname, &p->id)) { |
| 165 | return false; |
| 166 | } |
| 167 | progress = true; |
| 168 | } |
| 169 | if (absl::ConsumePrefix(&fullname, "/gpu:") || |
| 170 | absl::ConsumePrefix(&fullname, "/GPU:")) { |
| 171 | p->has_type = true; |
nothing calls this directly
no test coverage detected