]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.nativemem/src/org/simantics/nativemem/internal/Resource64.java
Rudimentary Linux and MacOSX support for org.simantics.nativemem
[simantics/platform.git] / bundles / org.simantics.nativemem / src / org / simantics / nativemem / internal / Resource64.java
1 /*******************************************************************************
2  * Copyright (c) 2016, 2017 Association for Decentralized Information Management
3  * in Industry THTH ry.
4  * All rights reserved. This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License v1.0
6  * which accompanies this distribution, and is available at
7  * http://www.eclipse.org/legal/epl-v10.html
8  *
9  * Contributors:
10  *     Semantum Oy - initial API and implementation
11  *******************************************************************************/
12 package org.simantics.nativemem.internal;
13
14 import java.util.List;
15
16 import com.sun.jna.Native;
17 import com.sun.jna.Structure;
18
19 /**
20  * This should work for Linux, MacOSX and BSD.
21
22  * @author Tuukka Lehtonen
23  * @since 1.29.0
24  */
25 public interface Resource64 extends Resource {
26     Resource64 INSTANCE = Native.loadLibrary("c", Resource64.class);
27
28     public static class Timeval extends Structure {
29
30         public static final List<String> FIELDS = createFieldsOrder("tv_sec", "tv_usec");
31
32         long v_sec;     /* seconds */
33         long tv_usec;  /* microseconds */
34
35         public List<String> getFieldOrder() {
36             return FIELDS;
37         }
38     };
39
40     public static class Rusage extends Structure {
41
42         public static final List<String> FIELDS = createFieldsOrder("ru_utime", "ru_stime", "ru_maxrss", "ru_ixrss",
43                 "ru_idrss", "ru_isrss", "ru_minflt", "ru_maxflt", "ru_nswap", "ru_inblock", "ru_oublock", "ru_msgsnd",
44                 "ru_msgrcv", "ru_nsignals", "ru_nvcsw", "ru_nivcsw");
45
46         Timeval ru_utime;        /* user CPU time used */
47         Timeval ru_stime;        /* system CPU time used */
48         long   ru_maxrss;        /* maximum resident set size */
49         long   ru_ixrss;         /* integral shared memory size */
50         long   ru_idrss;         /* integral unshared data size */
51         long   ru_isrss;         /* integral unshared stack size */
52         long   ru_minflt;        /* page reclaims (soft page faults) */
53         long   ru_majflt;        /* page faults (hard page faults) */
54         long   ru_nswap;         /* swaps */
55         long   ru_inblock;       /* block input operations */
56         long   ru_oublock;       /* block output operations */
57         long   ru_msgsnd;        /* IPC messages sent */
58         long   ru_msgrcv;        /* IPC messages received */
59         long   ru_nsignals;      /* signals received */
60         long   ru_nvcsw;         /* voluntary context switches */
61         long   ru_nivcsw;        /* involuntary context switches */
62
63         @Override
64         protected List<String> getFieldOrder() {
65             return FIELDS;
66         }
67
68         public void writeTo(CMemoryInfo to) {
69             to.peakRSS = ru_maxrss;
70         }
71
72     }
73
74     int getrusage(int who, Rusage rusage);
75 }