| /* |
| * Copyright 2015 The Chromium Authors. All rights reserved. |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include <sys/socket.h> |
| #include <sys/un.h> |
| |
| #include "tools/android/memtrack_helper/memtrack_helper.h" |
| |
| int main(int argc, char** argv) { |
| if (argc < 2) { |
| printf("Usage: %s <pid>\n", argv[0]); |
| return EXIT_FAILURE; |
| } |
| |
| const char* const pid = argv[1]; |
| printf("Requesting memtrack dump for pid %s\n", pid); |
| int sock = socket(AF_UNIX, SOCK_SEQPACKET, 0); |
| if (sock < 0) |
| exit_with_failure("socket"); |
| |
| /* Connect to the daemon via the UNIX abstract socket. */ |
| struct sockaddr_un server_addr; |
| init_memtrack_server_addr(&server_addr); |
| |
| if (connect(sock, (struct sockaddr*)&server_addr, sizeof(server_addr))) |
| exit_with_failure("connect"); |
| |
| if (send(sock, pid, strlen(pid) + 1, 0) < 0) |
| exit_with_failure("send"); |
| |
| char buf[4096]; |
| ssize_t rsize = recv(sock, buf, sizeof(buf) - 1, 0); |
| if (rsize < 0) |
| exit_with_failure("recv"); |
| buf[rsize] = '\0'; |
| |
| puts(buf); |
| return EXIT_SUCCESS; |
| } |